commit
6f64a7a9b3
@ -0,0 +1,2 @@
|
|||||||
|
# Use target-compatible line endings as the safe default for cross compilation.
|
||||||
|
* text=auto eol=lf
|
After Width: | Height: | Size: 7.3 KiB |
After Width: | Height: | Size: 8.8 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 5.7 KiB |
@ -0,0 +1,22 @@
|
|||||||
|
import QtQuick 2.0
|
||||||
|
import Sailfish.Silica 1.0
|
||||||
|
|
||||||
|
CoverBackground {
|
||||||
|
Label {
|
||||||
|
id: label
|
||||||
|
anchors.centerIn: parent
|
||||||
|
text: qsTr("My Cover")
|
||||||
|
}
|
||||||
|
|
||||||
|
CoverActionList {
|
||||||
|
id: coverAction
|
||||||
|
|
||||||
|
CoverAction {
|
||||||
|
iconSource: "image://theme/icon-cover-next"
|
||||||
|
}
|
||||||
|
|
||||||
|
CoverAction {
|
||||||
|
iconSource: "image://theme/icon-cover-pause"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
import QtQuick 2.0
|
||||||
|
import Sailfish.Silica 1.0
|
||||||
|
|
||||||
|
Page {
|
||||||
|
id: page
|
||||||
|
|
||||||
|
// The effective value will be restricted by ApplicationWindow.allowedOrientations
|
||||||
|
allowedOrientations: Orientation.All
|
||||||
|
|
||||||
|
// To enable PullDownMenu, place our content in a SilicaFlickable
|
||||||
|
SilicaFlickable {
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
// PullDownMenu and PushUpMenu must be declared in SilicaFlickable, SilicaListView or SilicaGridView
|
||||||
|
PullDownMenu {
|
||||||
|
MenuItem {
|
||||||
|
text: qsTr("Show Page 2")
|
||||||
|
onClicked: pageStack.animatorPush(Qt.resolvedUrl("SecondPage.qml"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tell SilicaFlickable the height of its content.
|
||||||
|
contentHeight: column.height
|
||||||
|
|
||||||
|
// Place our content in a Column. The PageHeader is always placed at the top
|
||||||
|
// of the page, followed by our content.
|
||||||
|
Column {
|
||||||
|
id: column
|
||||||
|
|
||||||
|
width: page.width
|
||||||
|
spacing: Theme.paddingLarge
|
||||||
|
PageHeader {
|
||||||
|
title: qsTr("UI Template")
|
||||||
|
}
|
||||||
|
Label {
|
||||||
|
x: Theme.horizontalPageMargin
|
||||||
|
text: qsTr("Hello Sailors")
|
||||||
|
color: Theme.secondaryHighlightColor
|
||||||
|
font.pixelSize: Theme.fontSizeExtraLarge
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
import QtQuick 2.0
|
||||||
|
import Sailfish.Silica 1.0
|
||||||
|
|
||||||
|
Page {
|
||||||
|
id: page
|
||||||
|
|
||||||
|
// The effective value will be restricted by ApplicationWindow.allowedOrientations
|
||||||
|
allowedOrientations: Orientation.All
|
||||||
|
|
||||||
|
SilicaListView {
|
||||||
|
id: listView
|
||||||
|
model: 20
|
||||||
|
anchors.fill: parent
|
||||||
|
header: PageHeader {
|
||||||
|
title: qsTr("Nested Page")
|
||||||
|
}
|
||||||
|
delegate: BackgroundItem {
|
||||||
|
id: delegate
|
||||||
|
|
||||||
|
Label {
|
||||||
|
x: Theme.horizontalPageMargin
|
||||||
|
text: qsTr("Item") + " " + index
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
color: delegate.highlighted ? Theme.highlightColor : Theme.primaryColor
|
||||||
|
}
|
||||||
|
onClicked: console.log("Clicked " + index)
|
||||||
|
}
|
||||||
|
VerticalScrollDecorator {}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
import QtQuick 2.0
|
||||||
|
import Sailfish.Silica 1.0
|
||||||
|
import "pages"
|
||||||
|
|
||||||
|
ApplicationWindow {
|
||||||
|
initialPage: Component { FirstPage { } }
|
||||||
|
cover: Qt.resolvedUrl("cover/CoverPage.qml")
|
||||||
|
allowedOrientations: defaultAllowedOrientations
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
# Rename this file as thermi2c.changes to include changelog
|
||||||
|
# entries in your RPM file.
|
||||||
|
#
|
||||||
|
# Add new changelog entries following the format below.
|
||||||
|
# Add newest entries to the top of the list.
|
||||||
|
# Separate entries from eachother with a blank line.
|
||||||
|
#
|
||||||
|
# Alternatively, if your changelog is automatically generated (e.g. with
|
||||||
|
# the git-change-log command provided with Sailfish OS SDK), create a
|
||||||
|
# thermi2c.changes.run script to let mb2 run the required commands for you.
|
||||||
|
|
||||||
|
# * date Author's Name <author's email> version-release
|
||||||
|
# - Summary of changes
|
||||||
|
|
||||||
|
* Sun Apr 13 2014 Jack Tar <jack.tar@example.com> 0.0.1-1
|
||||||
|
- Scrubbed the deck
|
||||||
|
- Hoisted the sails
|
||||||
|
|
@ -0,0 +1,24 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Rename this file as thermi2c.changes.run to let sfdk automatically
|
||||||
|
# generate changelog from well formatted Git commit messages and tag
|
||||||
|
# annotations. Note that 'sfdk changelog' must be invoked as 'sfdk-changelog' here.
|
||||||
|
|
||||||
|
sfdk-changelog
|
||||||
|
|
||||||
|
# Here are some basic examples how to change from the default behavior. Run
|
||||||
|
# 'sfdk --help-maintaining' to learn more.
|
||||||
|
|
||||||
|
# Use a subset of tags
|
||||||
|
#sfdk-changelog --tags refs/tags/my-prefix/*
|
||||||
|
|
||||||
|
# Group entries by minor revision, suppress headlines for patch-level revisions
|
||||||
|
#sfdk-changelog --dense '/[0-9]+.[0-9+$'
|
||||||
|
|
||||||
|
# Trim very old changes
|
||||||
|
#sfdk-changelog --since 2014-04-01
|
||||||
|
#echo '[ Some changelog entries trimmed for brevity ]'
|
||||||
|
|
||||||
|
# Use the subjects (first lines) of tag annotations when no entry would be
|
||||||
|
# included for a revision otherwise
|
||||||
|
#sfdk-changelog --auto-add-annotations
|
@ -0,0 +1,41 @@
|
|||||||
|
Name: thermi2c
|
||||||
|
|
||||||
|
Summary: thermi2c the thermal camera app for sailfish
|
||||||
|
Version: 0.1
|
||||||
|
Release: 1
|
||||||
|
License: LICENSE
|
||||||
|
URL: http://example.org/
|
||||||
|
Source0: %{name}-%{version}.tar.bz2
|
||||||
|
Requires: sailfishsilica-qt5 >= 0.10.9
|
||||||
|
BuildRequires: pkgconfig(sailfishapp) >= 1.0.2
|
||||||
|
BuildRequires: pkgconfig(Qt5Core)
|
||||||
|
BuildRequires: pkgconfig(Qt5Qml)
|
||||||
|
BuildRequires: pkgconfig(Qt5Quick)
|
||||||
|
BuildRequires: desktop-file-utils
|
||||||
|
|
||||||
|
%description
|
||||||
|
Short description of my Sailfish OS Application
|
||||||
|
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup -q -n %{name}-%{version}
|
||||||
|
|
||||||
|
%build
|
||||||
|
|
||||||
|
%qmake5
|
||||||
|
|
||||||
|
%make_build
|
||||||
|
|
||||||
|
|
||||||
|
%install
|
||||||
|
%qmake5_install
|
||||||
|
|
||||||
|
|
||||||
|
desktop-file-install --delete-original --dir %{buildroot}%{_datadir}/applications %{buildroot}%{_datadir}/applications/*.desktop
|
||||||
|
|
||||||
|
%files
|
||||||
|
%defattr(-,root,root,-)
|
||||||
|
%{_bindir}/%{name}
|
||||||
|
%{_datadir}/%{name}
|
||||||
|
%{_datadir}/applications/%{name}.desktop
|
||||||
|
%{_datadir}/icons/hicolor/*/apps/%{name}.png
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,154 @@
|
|||||||
|
/**
|
||||||
|
* @copyright (C) 2017 Melexis N.V.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#ifndef _MLX90640_API_H_
|
||||||
|
#define _MLX90640_API_H_
|
||||||
|
|
||||||
|
#define MLX90640_NO_ERROR 0
|
||||||
|
#define MLX90640_I2C_NACK_ERROR 1
|
||||||
|
#define MLX90640_I2C_WRITE_ERROR 2
|
||||||
|
#define MLX90640_BROKEN_PIXELS_NUM_ERROR 3
|
||||||
|
#define MLX90640_OUTLIER_PIXELS_NUM_ERROR 4
|
||||||
|
#define MLX90640_BAD_PIXELS_NUM_ERROR 5
|
||||||
|
#define MLX90640_ADJACENT_BAD_PIXELS_ERROR 6
|
||||||
|
#define MLX90640_EEPROM_DATA_ERROR 7
|
||||||
|
#define MLX90640_FRAME_DATA_ERROR 8
|
||||||
|
#define MLX90640_MEAS_TRIGGER_ERROR 9
|
||||||
|
|
||||||
|
#define BIT_MASK(x) (1UL << (x))
|
||||||
|
#define REG_MASK(sbit,nbits) ~((~(~0UL << (nbits))) << (sbit))
|
||||||
|
|
||||||
|
#define MLX90640_EEPROM_START_ADDRESS 0x2400
|
||||||
|
#define MLX90640_EEPROM_DUMP_NUM 832
|
||||||
|
#define MLX90640_PIXEL_DATA_START_ADDRESS 0x0400
|
||||||
|
#define MLX90640_PIXEL_NUM 768
|
||||||
|
#define MLX90640_LINE_NUM 24
|
||||||
|
#define MLX90640_COLUMN_NUM 32
|
||||||
|
#define MLX90640_LINE_SIZE 32
|
||||||
|
#define MLX90640_COLUMN_SIZE 24
|
||||||
|
#define MLX90640_AUX_DATA_START_ADDRESS 0x0700
|
||||||
|
#define MLX90640_AUX_NUM 64
|
||||||
|
#define MLX90640_STATUS_REG 0x8000
|
||||||
|
#define MLX90640_INIT_STATUS_VALUE 0x0030
|
||||||
|
#define MLX90640_STAT_FRAME_MASK BIT_MASK(0)
|
||||||
|
#define MLX90640_GET_FRAME(reg_value) (reg_value & MLX90640_STAT_FRAME_MASK)
|
||||||
|
#define MLX90640_STAT_DATA_READY_MASK BIT_MASK(3)
|
||||||
|
#define MLX90640_GET_DATA_READY(reg_value) (reg_value & MLX90640_STAT_DATA_READY_MASK)
|
||||||
|
|
||||||
|
#define MLX90640_CTRL_REG 0x800D
|
||||||
|
#define MLX90640_CTRL_TRIG_READY_MASK BIT_MASK(15)
|
||||||
|
#define MLX90640_CTRL_REFRESH_SHIFT 7
|
||||||
|
#define MLX90640_CTRL_REFRESH_MASK REG_MASK(MLX90640_CTRL_REFRESH_SHIFT,3)
|
||||||
|
#define MLX90640_CTRL_RESOLUTION_SHIFT 10
|
||||||
|
#define MLX90640_CTRL_RESOLUTION_MASK REG_MASK(MLX90640_CTRL_RESOLUTION_SHIFT,2)
|
||||||
|
#define MLX90640_CTRL_MEAS_MODE_SHIFT 12
|
||||||
|
#define MLX90640_CTRL_MEAS_MODE_MASK BIT_MASK(12)
|
||||||
|
|
||||||
|
#define MLX90640_MS_BYTE_SHIFT 8
|
||||||
|
#define MLX90640_MS_BYTE_MASK 0xFF00
|
||||||
|
#define MLX90640_LS_BYTE_MASK 0x00FF
|
||||||
|
#define MLX90640_MS_BYTE(reg16) ((reg16 & MLX90640_MS_BYTE_MASK) >> MLX90640_MS_BYTE_SHIFT)
|
||||||
|
#define MLX90640_LS_BYTE(reg16) (reg16 & MLX90640_LS_BYTE_MASK)
|
||||||
|
#define MLX90640_MSBITS_6_MASK 0xFC00
|
||||||
|
#define MLX90640_LSBITS_10_MASK 0x03FF
|
||||||
|
#define MLX90640_NIBBLE1_MASK 0x000F
|
||||||
|
#define MLX90640_NIBBLE2_MASK 0x00F0
|
||||||
|
#define MLX90640_NIBBLE3_MASK 0x0F00
|
||||||
|
#define MLX90640_NIBBLE4_MASK 0xF000
|
||||||
|
#define MLX90640_NIBBLE1(reg16) ((reg16 & MLX90640_NIBBLE1_MASK))
|
||||||
|
#define MLX90640_NIBBLE2(reg16) ((reg16 & MLX90640_NIBBLE2_MASK) >> 4)
|
||||||
|
#define MLX90640_NIBBLE3(reg16) ((reg16 & MLX90640_NIBBLE3_MASK) >> 8)
|
||||||
|
#define MLX90640_NIBBLE4(reg16) ((reg16 & MLX90640_NIBBLE4_MASK) >> 12)
|
||||||
|
|
||||||
|
#define POW2(x) pow(2, (double)x)
|
||||||
|
|
||||||
|
#define SCALEALPHA 0.000001
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int16_t kVdd;
|
||||||
|
int16_t vdd25;
|
||||||
|
float KvPTAT;
|
||||||
|
float KtPTAT;
|
||||||
|
uint16_t vPTAT25;
|
||||||
|
float alphaPTAT;
|
||||||
|
int16_t gainEE;
|
||||||
|
float tgc;
|
||||||
|
float cpKv;
|
||||||
|
float cpKta;
|
||||||
|
uint8_t resolutionEE;
|
||||||
|
uint8_t calibrationModeEE;
|
||||||
|
float KsTa;
|
||||||
|
float ksTo[5];
|
||||||
|
int16_t ct[5];
|
||||||
|
uint16_t alpha[768];
|
||||||
|
uint8_t alphaScale;
|
||||||
|
int16_t offset[768];
|
||||||
|
int8_t kta[768];
|
||||||
|
uint8_t ktaScale;
|
||||||
|
int8_t kv[768];
|
||||||
|
uint8_t kvScale;
|
||||||
|
float cpAlpha[2];
|
||||||
|
int16_t cpOffset[2];
|
||||||
|
float ilChessC[3];
|
||||||
|
uint16_t brokenPixels[5];
|
||||||
|
uint16_t outlierPixels[5];
|
||||||
|
} paramsMLX90640;
|
||||||
|
|
||||||
|
class MLX90640{
|
||||||
|
public:
|
||||||
|
int MLX90640_DumpEE(uint8_t slaveAddr, uint16_t *eeData);
|
||||||
|
int MLX90640_SynchFrame(uint8_t slaveAddr);
|
||||||
|
int MLX90640_TriggerMeasurement(uint8_t slaveAddr);
|
||||||
|
int MLX90640_GetFrameData(uint8_t slaveAddr, uint16_t *frameData);
|
||||||
|
int MLX90640_ExtractParameters(uint16_t *eeData, paramsMLX90640 *mlx90640);
|
||||||
|
float MLX90640_GetVdd(uint16_t *frameData, const paramsMLX90640 *params);
|
||||||
|
float MLX90640_GetTa(uint16_t *frameData, const paramsMLX90640 *params);
|
||||||
|
void MLX90640_GetImage(uint16_t *frameData, const paramsMLX90640 *params, float *result);
|
||||||
|
void MLX90640_CalculateTo(uint16_t *frameData, const paramsMLX90640 *params, float emissivity, float tr, float *result);
|
||||||
|
int MLX90640_SetResolution(uint8_t slaveAddr, uint8_t resolution);
|
||||||
|
int MLX90640_GetCurResolution(uint8_t slaveAddr);
|
||||||
|
int MLX90640_SetRefreshRate(uint8_t slaveAddr, uint8_t refreshRate);
|
||||||
|
int MLX90640_GetRefreshRate(uint8_t slaveAddr);
|
||||||
|
int MLX90640_GetSubPageNumber(uint16_t *frameData);
|
||||||
|
int MLX90640_GetCurMode(uint8_t slaveAddr);
|
||||||
|
int MLX90640_SetInterleavedMode(uint8_t slaveAddr);
|
||||||
|
int MLX90640_SetChessMode(uint8_t slaveAddr);
|
||||||
|
void MLX90640_BadPixelsCorrection(uint16_t *pixels, float *to, int mode, paramsMLX90640 *params);
|
||||||
|
protected:
|
||||||
|
void ExtractVDDParameters(uint16_t *eeData, paramsMLX90640 *mlx90640);
|
||||||
|
void ExtractPTATParameters(uint16_t *eeData, paramsMLX90640 *mlx90640);
|
||||||
|
void ExtractGainParameters(uint16_t *eeData, paramsMLX90640 *mlx90640);
|
||||||
|
void ExtractTgcParameters(uint16_t *eeData, paramsMLX90640 *mlx90640);
|
||||||
|
void ExtractResolutionParameters(uint16_t *eeData, paramsMLX90640 *mlx90640);
|
||||||
|
void ExtractKsTaParameters(uint16_t *eeData, paramsMLX90640 *mlx90640);
|
||||||
|
void ExtractKsToParameters(uint16_t *eeData, paramsMLX90640 *mlx90640);
|
||||||
|
void ExtractAlphaParameters(uint16_t *eeData, paramsMLX90640 *mlx90640);
|
||||||
|
void ExtractOffsetParameters(uint16_t *eeData, paramsMLX90640 *mlx90640);
|
||||||
|
void ExtractKtaPixelParameters(uint16_t *eeData, paramsMLX90640 *mlx90640);
|
||||||
|
void ExtractKvPixelParameters(uint16_t *eeData, paramsMLX90640 *mlx90640);
|
||||||
|
void ExtractCPParameters(uint16_t *eeData, paramsMLX90640 *mlx90640);
|
||||||
|
void ExtractCILCParameters(uint16_t *eeData, paramsMLX90640 *mlx90640);
|
||||||
|
int ExtractDeviatingPixels(uint16_t *eeData, paramsMLX90640 *mlx90640);
|
||||||
|
int CheckAdjacentPixels(uint16_t pix1, uint16_t pix2);
|
||||||
|
float GetMedian(float *values, int n);
|
||||||
|
int IsPixelBad(uint16_t pixel,paramsMLX90640 *params);
|
||||||
|
int ValidateFrameData(uint16_t *frameData);
|
||||||
|
int ValidateAuxData(uint16_t *auxData);
|
||||||
|
};
|
||||||
|
#endif
|
@ -0,0 +1,92 @@
|
|||||||
|
#include "MLX90640_I2C_Driver.h"
|
||||||
|
#include <linux/i2c.h>
|
||||||
|
#include <linux/i2c-dev.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <QCoreApplication>
|
||||||
|
#include <QSettings>
|
||||||
|
#include <QProcess>
|
||||||
|
#include <QThread>
|
||||||
|
#include <sailfishapp.h>
|
||||||
|
#include "conv.h"
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
void MLX90640_I2CInit(void){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int MLX90640_I2CGeneralReset(void){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int MLX90640_I2CRead(uint8_t slaveAddr,uint16_t startAddress, uint16_t nMemAddressRead, uint16_t *data){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MLX90640_I2CFreqSet(int freq){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int MLX90640_I2CWrite(uint8_t slaveAddr,uint16_t writeAddress, uint16_t data)
|
||||||
|
{
|
||||||
|
int file;
|
||||||
|
char buf[200];
|
||||||
|
bool parseOk;
|
||||||
|
|
||||||
|
QByteArray tmpBa = devName.toUtf8();
|
||||||
|
const char* devNameChar = tmpBa.constData();
|
||||||
|
|
||||||
|
fprintf(stderr, "writing to address %02x: ", address);
|
||||||
|
|
||||||
|
/* parse QString data to buf */
|
||||||
|
QStringList bytes = data.split(" ");
|
||||||
|
int i;
|
||||||
|
for (i=0 ; i<bytes.length(); i++)
|
||||||
|
{
|
||||||
|
QString tmp = bytes.value(i);
|
||||||
|
buf[i] = tmp.toInt(&parseOk, 16);
|
||||||
|
if (!parseOk)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "parsing error %d\n", i);
|
||||||
|
emit i2cError();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
fprintf(stderr, "%02x ", buf[i]);
|
||||||
|
}
|
||||||
|
fprintf(stderr, "\n");
|
||||||
|
|
||||||
|
|
||||||
|
if ((file = open (devNameChar, O_RDWR)) < 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr,"open error\n");
|
||||||
|
emit i2cError();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ioctl(file, I2C_SLAVE, address) < 0)
|
||||||
|
{
|
||||||
|
close(file);
|
||||||
|
fprintf(stderr,"ioctl error\n");
|
||||||
|
emit i2cError();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* write the data */
|
||||||
|
if (write( file, buf, bytes.length() ) != bytes.length())
|
||||||
|
{
|
||||||
|
close(file);
|
||||||
|
fprintf(stderr,"write error\n");
|
||||||
|
emit i2cError();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
close(file);
|
||||||
|
|
||||||
|
fprintf(stderr,"write ok\n");
|
||||||
|
|
||||||
|
emit i2cWriteOk();
|
||||||
|
return 0;
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
/**
|
||||||
|
* @copyright (C) 2017 Melexis N.V.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#ifndef _MLX90640_I2C_Driver_H_
|
||||||
|
#define _MLX90640_I2C_Driver_H_
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "MLX90640_API.h"
|
||||||
|
|
||||||
|
extern void MLX90640_I2CInit(void);
|
||||||
|
extern int MLX90640_I2CGeneralReset(void);
|
||||||
|
extern int MLX90640_I2CRead(uint8_t slaveAddr,uint16_t startAddress, uint16_t nMemAddressRead, uint16_t *data);
|
||||||
|
extern int MLX90640_I2CWrite(uint8_t slaveAddr,uint16_t writeAddress, uint16_t data);
|
||||||
|
extern void MLX90640_I2CFreqSet(int freq);
|
||||||
|
#endif
|
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef CONV_H
|
||||||
|
#define CONV_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include <QString>
|
||||||
|
#include <QColor>
|
||||||
|
|
||||||
|
class Conv : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
Q_INVOKABLE QString toHex(QColor col);
|
||||||
|
Q_INVOKABLE QString toHex(int a, int l);
|
||||||
|
Q_INVOKABLE int toInt(QString in);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // CONV_H
|
@ -0,0 +1,20 @@
|
|||||||
|
#ifdef QT_QML_DEBUG
|
||||||
|
#include <QtQuick>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <sailfishapp.h>
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
// SailfishApp::main() will display "qml/thermi2c.qml", if you need more
|
||||||
|
// control over initialization, you can use:
|
||||||
|
//
|
||||||
|
// - SailfishApp::application(int, char *[]) to get the QGuiApplication *
|
||||||
|
// - SailfishApp::createView() to get a new QQuickView * instance
|
||||||
|
// - SailfishApp::pathTo(QString) to get a QUrl to a resource file
|
||||||
|
// - SailfishApp::pathToMainQml() to get a QUrl to the main QML file
|
||||||
|
//
|
||||||
|
// To display the view, call "show()" (will show fullscreen on device).
|
||||||
|
|
||||||
|
return SailfishApp::main(argc, argv);
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Type=Application
|
||||||
|
X-Nemo-Application-Type=silica-qt5
|
||||||
|
Icon=thermi2c
|
||||||
|
Exec=thermi2c
|
||||||
|
Name=thermi2c
|
||||||
|
# translation example:
|
||||||
|
# your app name in German locale (de)
|
||||||
|
#
|
||||||
|
# Remember to comment out the following line, if you do not want to use
|
||||||
|
# a different app name in German locale (de).
|
||||||
|
Name[de]=thermi2c
|
||||||
|
|
||||||
|
[X-Sailjail]
|
||||||
|
# Replace with your organization as a reverse domain name
|
||||||
|
OrganizationName=org.myorg
|
||||||
|
# ApplicationName does not have to be identical to Name
|
||||||
|
ApplicationName=thermi2c
|
||||||
|
# Add the required permissions here
|
||||||
|
Permissions=
|
@ -0,0 +1,46 @@
|
|||||||
|
# NOTICE:
|
||||||
|
#
|
||||||
|
# Application name defined in TARGET has a corresponding QML filename.
|
||||||
|
# If name defined in TARGET is changed, the following needs to be done
|
||||||
|
# to match new name:
|
||||||
|
# - corresponding QML filename must be changed
|
||||||
|
# - desktop icon filename must be changed
|
||||||
|
# - desktop filename must be changed
|
||||||
|
# - icon definition filename in desktop file must be changed
|
||||||
|
# - translation filenames have to be changed
|
||||||
|
|
||||||
|
# The name of your application
|
||||||
|
TARGET = thermi2c
|
||||||
|
|
||||||
|
CONFIG += sailfishapp
|
||||||
|
|
||||||
|
SOURCES += src/thermi2c.cpp \
|
||||||
|
src/MLX90640_API.cpp \
|
||||||
|
src/MLX90640_I2C_Driver.cpp
|
||||||
|
|
||||||
|
DISTFILES += qml/thermi2c.qml \
|
||||||
|
qml/cover/CoverPage.qml \
|
||||||
|
qml/pages/FirstPage.qml \
|
||||||
|
qml/pages/SecondPage.qml \
|
||||||
|
rpm/thermi2c.changes.in \
|
||||||
|
rpm/thermi2c.changes.run.in \
|
||||||
|
rpm/thermi2c.spec \
|
||||||
|
translations/*.ts \
|
||||||
|
thermi2c.desktop
|
||||||
|
|
||||||
|
SAILFISHAPP_ICONS = 86x86 108x108 128x128 172x172
|
||||||
|
|
||||||
|
# to disable building translations every time, comment out the
|
||||||
|
# following CONFIG line
|
||||||
|
CONFIG += sailfishapp_i18n
|
||||||
|
|
||||||
|
# German translation is enabled as an example. If you aren't
|
||||||
|
# planning to localize your app, remember to comment out the
|
||||||
|
# following TRANSLATIONS line. And also do not forget to
|
||||||
|
# modify the localized app name in the the .desktop file.
|
||||||
|
TRANSLATIONS += translations/thermi2c-de.ts
|
||||||
|
|
||||||
|
HEADERS += \
|
||||||
|
src/MLX90640_API.h \
|
||||||
|
src/MLX90640_I2C_Driver.h \
|
||||||
|
src/conv.h
|
@ -0,0 +1,37 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE TS>
|
||||||
|
<TS version="2.1">
|
||||||
|
<context>
|
||||||
|
<name>CoverPage</name>
|
||||||
|
<message>
|
||||||
|
<source>My Cover</source>
|
||||||
|
<translation>Mein Cover</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>FirstPage</name>
|
||||||
|
<message>
|
||||||
|
<source>Show Page 2</source>
|
||||||
|
<translation>Zur Seite 2</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>UI Template</source>
|
||||||
|
<translation>UI-Vorlage</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Hello Sailors</source>
|
||||||
|
<translation>Hallo Matrosen</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>SecondPage</name>
|
||||||
|
<message>
|
||||||
|
<source>Nested Page</source>
|
||||||
|
<translation>Unterseite</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Item</source>
|
||||||
|
<translation>Element</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
</TS>
|
@ -0,0 +1,37 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE TS>
|
||||||
|
<TS version="2.1">
|
||||||
|
<context>
|
||||||
|
<name>CoverPage</name>
|
||||||
|
<message>
|
||||||
|
<source>My Cover</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>FirstPage</name>
|
||||||
|
<message>
|
||||||
|
<source>Show Page 2</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>UI Template</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Hello Sailors</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>SecondPage</name>
|
||||||
|
<message>
|
||||||
|
<source>Nested Page</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Item</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
</TS>
|
Loading…
Reference in new issue