Skip to content
This repository has been archived by the owner on Dec 26, 2022. It is now read-only.

Commit

Permalink
feat(endpoint): Implement diagnose app
Browse files Browse the repository at this point in the history
Record the signal strength, GPS data and time in log.

TODO: Get the correct time with the consideration of time zone.

Related to #688.
  • Loading branch information
marktwtn committed Jul 16, 2020
1 parent 782a6e7 commit 7e6cadf
Show file tree
Hide file tree
Showing 4 changed files with 148 additions and 0 deletions.
20 changes: 20 additions & 0 deletions endpoint/diagnose.adef
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
executables:
{
diagnose = ( diagnoseComp )
}

processes:
{
run:
{
(diagnose)
}
}

bindings:
{
diagnose.diagnoseComp.le_gnss -> positioningService.le_gnss
diagnose.diagnoseComp.le_mrc -> modemService.le_mrc
}

start: manual
18 changes: 18 additions & 0 deletions endpoint/diagnoseComp/Component.cdef
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
requires:
{
api:
{
modemServices/le_mrc.api
positioning/le_gnss.api
}
}

sources:
{
diagnose.c
}

cflags:
{
-g -O0
}
85 changes: 85 additions & 0 deletions endpoint/diagnoseComp/diagnose.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
/*
* Copyright (C) 2019-2020 BiiLabs Co., Ltd. and Contributors
* All Rights Reserved.
* This is free software; you can redistribute it and/or modify it under the
* terms of the MIT license. A copy of the license can be found in the file
* "LICENSE" at the root of this distribution.
*/

#include "diagnose.h"

#include "le_gnss_interface.h"
#include "le_mrc_interface.h"

static void hardware_logging(le_timer_Ref_t timer) {
static char time_str[30];
static size_t copied_bytes = 0;
static int32_t latitude = 0, longitude = 0, accuracy = 0;
static uint32_t quality = 0;
static le_gnss_SampleRef_t position_sample;
static le_result_t result;

// Signal strength
result = le_mrc_GetSignalQual(&quality);
switch (result) {
case LE_OK:
LE_INFO("Signal strength: %d\n", quality);
break;
default:
LE_ERROR("Fail to get signal strength\n");
break;
}

// GPS
position_sample = le_gnss_GetLastSampleRef();
result = le_gnss_GetLocation(position_sample, &latitude, &longitude, &accuracy);
switch (result) {
case LE_OK:
LE_INFO("Latitude: %lf, Longitude: %lf, Horizontal accuracy: %d\n", (double)latitude / 1000000,
(double)longitude / 1000000, accuracy);
break;
case LE_FAULT:
LE_ERROR("Fail to get location data\n");
break;
case LE_OUT_OF_RANGE:
LE_ERROR("At least one retrieved value is invalid (set to INT32_MAX)\n");
LE_INFO("Latitude: %lf, Longitude: %lf, Horizontal accuracy: %d\n", (double)latitude / 1000000,
(double)longitude / 1000000, accuracy);
break;
default:
break;
}

// Time
result = le_clk_GetLocalDateTimeString(LE_CLK_STRING_FORMAT_DATE_TIME, time_str, sizeof(time_str), &copied_bytes);
switch (result) {
case LE_OK:
LE_INFO("Time: %s\n", time_str);
break;
case LE_OVERFLOW:
LE_ERROR("Overflow of time string\n");
break;
default:
break;
}
}

COMPONENT_INIT {
le_timer_Ref_t timer;
le_clk_Time_t interval = {3 /*sec*/, 0 /*usec*/};
le_gnss_State_t gnss_state;

// GPS state checking and activation
gnss_state = le_gnss_GetState();
if (gnss_state != LE_GNSS_STATE_ACTIVE) {
le_gnss_Start();
le_gnss_Enable();
}

// Timer for hardware logging
timer = le_timer_Create("diagnose_timer");
le_timer_SetInterval(timer, interval);
le_timer_SetRepeat(timer, 0);
le_timer_SetHandler(timer, hardware_logging);
le_timer_Start(timer);
}
25 changes: 25 additions & 0 deletions endpoint/diagnoseComp/diagnose.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/*
* Copyright (C) 2019-2020 BiiLabs Co., Ltd. and Contributors
* All Rights Reserved.
* This is free software; you can redistribute it and/or modify it under the
* terms of the MIT license. A copy of the license can be found in the file
* "LICENSE" at the root of this distribution.
*/

#ifndef DIAGNOSE_H
#define DIAGNOSE_H

#include "legato.h"

/**
* @file endpoint/diagnoseComp/diagnose.h
*/

/**
* @brief Log the information from hardware
*
* @param[in] timer The timer of the function. It would be passed by the timer API le_timer_SetHandler().
*/
static void hardware_logging(le_timer_Ref_t timer);

#endif // DIAGNOSE_H

0 comments on commit 7e6cadf

Please sign in to comment.