diff --git a/colorattributer.h b/colorattributer.h index 786687b..97e50da 100644 --- a/colorattributer.h +++ b/colorattributer.h @@ -11,10 +11,11 @@ class ColorAttributer : public QObject Q_OBJECT protected: std::map myColors; - float minValue, maxValue; QString myName; public: - ColorAttributer(QString name, const float& minValue = -3000000.0f, const float& maxValue = -1000000.0f) : minValue(minValue), maxValue(maxValue), myName(name) {} + float minValue, maxValue; + //ColorAttributer(QString name, const float& minValue = -3000000.0f, const float& maxValue = -1000000.0f) : minValue(minValue), maxValue(maxValue), myName(name) {} + ColorAttributer(QString name, const float& minValue = 0.0f, const float& maxValue = 1.0f) : minValue(minValue), maxValue(maxValue), myName(name) {} Q_INVOKABLE inline QString getName() const {return myName;} Q_INVOKABLE void addColor(const float& value, const QColor& color); Q_INVOKABLE QColor encode(const float& value); diff --git a/perlin.h b/perlin.h index 5f92bbc..de0d4a3 100644 --- a/perlin.h +++ b/perlin.h @@ -38,6 +38,7 @@ public: return interpolate(i1, i2, fractionalPartY); } void fillWithPerlinNoise(QVector& vector, int width, int height, int seed) { + fprintf(stderr, "creating noise..\n"); float t = 0.0f; for (int y = 0; y < height; ++y) { for (int x = 0; x < width; ++x) { diff --git a/src/MLX90640_API.h b/src/MLX90640_API.h index 7a34172..709ca5a 100644 --- a/src/MLX90640_API.h +++ b/src/MLX90640_API.h @@ -113,6 +113,7 @@ public: emit initializedChanged(); } } + Perlin perlin; typedef struct { @@ -171,24 +172,38 @@ public: Q_INVOKABLE void fuzzyInit(){ int status; uint16_t eeMLX90640[832]; - status = mlx90640_SetRefreshRate (0x33,0x06); //32hz - int curRR = mlx90640_GetRefreshRate (0x33); - fprintf(stderr, "refresh rate: %d\n", curRR); - status = mlx90640_SetResolution(0x33,0x00); //16 bit res - //status = mlx90640_SetInterleavedMode (0x33); //linear interlacing mode - status = mlx90640_SetChessMode (0x33); //chess interlacing mode - int mode = mlx90640_GetCurMode(0x33); - fprintf(stderr, "interlacing mode: %d\n", mode); - usleep(10000); - - fprintf(stderr, "dump EEprom...\n"); - status = mlx90640_DumpEE (slaveAddress, eeMLX90640); - usleep(1000); - fprintf(stderr, "extract parameters...\n"); - status = mlx90640_ExtractParameters(eeMLX90640, &mlx90640); - usleep(1000); - - getData(); //test read(initial) + try{ + status = mlx90640_SetRefreshRate (0x33,0x06); //32hz + int curRR = mlx90640_GetRefreshRate (0x33); + fprintf(stderr, "refresh rate: %d\n", curRR); + status = mlx90640_SetResolution(0x33,0x00); //16 bit res + //status = mlx90640_SetInterleavedMode (0x33); //linear interlacing mode + status = mlx90640_SetChessMode (0x33); //chess interlacing mode + int mode = mlx90640_GetCurMode(0x33); + fprintf(stderr, "interlacing mode: %d\n", mode); + usleep(10000); + + fprintf(stderr, "dump EEprom...\n"); + status = mlx90640_DumpEE (slaveAddress, eeMLX90640); + usleep(1000); + if(status != 0){ + perlin.fillWithPerlinNoise(imageVect, 32, 24, 0xBEEF); + emit initializedChanged(); + emit dataReady(imageVect); + return; + } + fprintf(stderr, "extract parameters...\n"); + status = mlx90640_ExtractParameters(eeMLX90640, &mlx90640); + usleep(1000); + if(status == 0) + getData(); + else{ + perlin.fillWithPerlinNoise(imageVect, 32, 24, 0xBEEF); + emit dataReady(imageVect); + } + }catch(...){ + perlin.fillWithPerlinNoise(imageVect, 32, 24, 0xBEEF); + } emit initializedChanged(); } @@ -198,8 +213,12 @@ public: float mlx90640Image[768]; int status; //status = mlx90640_TriggerMeasurement (0x33); - status = mlx90640_SynchFrame(0x33); - status = mlx90640_GetFrameData (0x33, mlx90640Frame); + try{ + status = mlx90640_SynchFrame(0x33); + status = mlx90640_GetFrameData (0x33, mlx90640Frame); + }catch(...){ + status = -1; + } if (status == 0) { mlx90640_GetImage(mlx90640Frame, &mlx90640, mlx90640Image); @@ -207,7 +226,6 @@ public: imageVect[i] = mlx90640Image[i]; } } else { - Perlin perlin; perlin.fillWithPerlinNoise(imageVect, 32, 24, 0xBEEF); } @@ -247,7 +265,6 @@ protected: int IsPixelBad(uint16_t pixel,paramsMLX90640 *params); int ValidateFrameData(uint16_t *frameData); int ValidateAuxData(uint16_t *auxData); - Perlin perlin; signals: void dataReady(QVector data); void initializedChanged(); diff --git a/src/MLX90640_I2C_Driver.cpp b/src/MLX90640_I2C_Driver.cpp index 24bd7c7..3ab9044 100644 --- a/src/MLX90640_I2C_Driver.cpp +++ b/src/MLX90640_I2C_Driver.cpp @@ -29,12 +29,10 @@ void mlx90640_I2CFreqSet(int freq){ } int mlx90640_I2CRead(uint8_t slaveAddr,uint16_t startAddress, uint16_t nMemAddressRead, uint16_t *data){ - i2cDriverSingleton::getinstance()->i2cRead(slaveAddr, startAddress, nMemAddressRead, data); - return 0; + return i2cDriverSingleton::getinstance()->i2cRead(slaveAddr, startAddress, nMemAddressRead, data); } int mlx90640_I2CWrite(uint8_t slaveAddr,uint16_t writeAddress, uint16_t data) { - i2cDriverSingleton::getinstance()->i2cWrite(slaveAddr, writeAddress, data); - return 0; + return i2cDriverSingleton::getinstance()->i2cWrite(slaveAddr, writeAddress, data); } diff --git a/src/i2cif.cpp b/src/i2cif.cpp index 734f3a3..f8bf749 100644 --- a/src/i2cif.cpp +++ b/src/i2cif.cpp @@ -108,7 +108,7 @@ bool I2cif::tohVddGet() * */ -Q_INVOKABLE void I2cif::i2cWrite(const uint8_t &slaveAddr, const uint16_t &writeAddress, const uint16_t &data){ +Q_INVOKABLE int I2cif::i2cWrite(const uint8_t &slaveAddr, const uint16_t &writeAddress, const uint16_t &data){ int file; __u8 buf[4]; @@ -120,7 +120,7 @@ Q_INVOKABLE void I2cif::i2cWrite(const uint8_t &slaveAddr, const uint16_t &write { fprintf(stderr,"open error\n"); emit i2cError(); - return; + return -1; } if (ioctl(file, I2C_SLAVE, slaveAddr) < 0) @@ -128,7 +128,7 @@ Q_INVOKABLE void I2cif::i2cWrite(const uint8_t &slaveAddr, const uint16_t &write close(file); fprintf(stderr,"ioctl error\n"); emit i2cError(); - return; + return -1; } buf[0] = (writeAddress >> 8) & 0xFF; // High byte @@ -148,7 +148,7 @@ Q_INVOKABLE void I2cif::i2cWrite(const uint8_t &slaveAddr, const uint16_t &write close(file); fprintf(stderr,"write error\n"); emit i2cError(); - return; + return -1; } close(file); @@ -156,9 +156,10 @@ Q_INVOKABLE void I2cif::i2cWrite(const uint8_t &slaveAddr, const uint16_t &write //fprintf(stderr,"write ok\n"); emit i2cWriteOk(); + return 0; } -void I2cif::i2cRead(const uint8_t &slaveAddr, const uint16_t &startAddress, const uint16_t &nMemAddressRead, uint16_t *data) +int I2cif::i2cRead(const uint8_t &slaveAddr, const uint16_t &startAddress, const uint16_t &nMemAddressRead, uint16_t *data) { int file; Conv conv; @@ -173,7 +174,7 @@ void I2cif::i2cRead(const uint8_t &slaveAddr, const uint16_t &startAddress, cons fprintf(stderr,"open error\n"); emit i2cError(); delete[] buf; - return; + return -1; } struct i2c_rdwr_ioctl_data i2c_data; @@ -215,7 +216,7 @@ void I2cif::i2cRead(const uint8_t &slaveAddr, const uint16_t &startAddress, cons fprintf(stderr, "read data fail %d\n", ret); emit i2cError(); delete[] buf; - return; + return -1; } //fprintf(stderr, "read "); @@ -236,6 +237,8 @@ void I2cif::i2cRead(const uint8_t &slaveAddr, const uint16_t &startAddress, cons delete[] buf; emit i2cReadResultChanged(); close(file); + + return 0; } diff --git a/src/i2cif.h b/src/i2cif.h index 6610408..930f382 100644 --- a/src/i2cif.h +++ b/src/i2cif.h @@ -22,8 +22,8 @@ public: Q_INVOKABLE void i2cProbe(QString devName); Q_INVOKABLE void i2cWrite(QString devName, unsigned char address, QString data); Q_INVOKABLE void i2cRead(QString devName, unsigned char address, int count); - Q_INVOKABLE void i2cWrite(const uint8_t &slaveAddr,const uint16_t &writeAddress,const uint16_t &data); - Q_INVOKABLE void i2cRead(const uint8_t &slaveAddr,const uint16_t &startAddress, const uint16_t &nMemAddressRead,uint16_t *data); + Q_INVOKABLE int i2cWrite(const uint8_t &slaveAddr,const uint16_t &writeAddress,const uint16_t &data); + Q_INVOKABLE int i2cRead(const uint8_t &slaveAddr,const uint16_t &startAddress, const uint16_t &nMemAddressRead,uint16_t *data); Q_INVOKABLE void i2cWriteThenRead(QString devName, unsigned char address, QString data, int count); Q_INVOKABLE void tohVddSet(QString onOff); diff --git a/thermi2c.pro.user b/thermi2c.pro.user index b4ad8da..417ba41 100644 --- a/thermi2c.pro.user +++ b/thermi2c.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId