Simple Weather Service - code cleaning and improvements
Add missing icons (heavy clouds, thunderstorm, snow). Remove unneeded comparison operator (!=), improve conversion of Timestamp and MessageType, order includes. Fix typo in documentation. Remove not related change in StopWatch.
This commit is contained in:
parent
fe4b07c610
commit
3a8c7dc038
7 changed files with 28 additions and 37 deletions
|
@ -40,8 +40,8 @@ The byte array must contain the following data:
|
|||
- 4 = Clouds & rain
|
||||
- 5 = Rain
|
||||
- 6 = Thunderstorm
|
||||
- 7 = snow
|
||||
- 8 = mist, smog
|
||||
- 7 = Snow
|
||||
- 8 = Mist, smog
|
||||
|
||||
### Forecast
|
||||
|
||||
|
@ -65,4 +65,4 @@ The byte array must contain the following data:
|
|||
- [22] Day 3 Icon ID
|
||||
- [23] Day 4 Minimum temperature
|
||||
- [24] Day 4 Maximum temperature
|
||||
- [25] Day 4 Incon ID
|
||||
- [25] Day 4 Icon ID
|
|
@ -15,24 +15,27 @@
|
|||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "components/ble/SimpleWeatherService.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include "SimpleWeatherService.h"
|
||||
#include <cstring>
|
||||
#include <nrf_log.h>
|
||||
#include <array>
|
||||
|
||||
using namespace Pinetime::Controllers;
|
||||
|
||||
namespace {
|
||||
enum class MessageType { CurrentWeather, Forecast, Unknown };
|
||||
enum class MessageType : uint8_t { CurrentWeather, Forecast, Unknown };
|
||||
|
||||
uint64_t ToUInt64(const uint8_t* data) {
|
||||
return *(reinterpret_cast<const uint64_t*>(data));
|
||||
}
|
||||
|
||||
SimpleWeatherService::CurrentWeather CreateCurrentWeather(const uint8_t* dataBuffer) {
|
||||
char cityName[33];
|
||||
std::memcpy(&cityName[0], &dataBuffer[13], 32);
|
||||
cityName[32] = '\0';
|
||||
return SimpleWeatherService::CurrentWeather {dataBuffer[2] + (dataBuffer[3] << 8) + (dataBuffer[4] << 16) + (dataBuffer[5] << 24) +
|
||||
((uint64_t) dataBuffer[6] << 32) + ((uint64_t) dataBuffer[7] << 40) +
|
||||
((uint64_t) dataBuffer[8] << 48) + ((uint64_t) dataBuffer[9] << 54),
|
||||
return SimpleWeatherService::CurrentWeather {ToUInt64(&dataBuffer[2]),
|
||||
dataBuffer[10],
|
||||
dataBuffer[11],
|
||||
dataBuffer[12],
|
||||
|
@ -41,9 +44,7 @@ namespace {
|
|||
}
|
||||
|
||||
SimpleWeatherService::Forecast CreateForecast(const uint8_t* dataBuffer) {
|
||||
uint64_t timestamp = static_cast<uint64_t>(dataBuffer[2] + (dataBuffer[3] << 8) + (dataBuffer[4] << 16) + (dataBuffer[5] << 24) +
|
||||
((uint64_t) dataBuffer[6] << 32) + ((uint64_t) dataBuffer[7] << 40) +
|
||||
((uint64_t) dataBuffer[8] << 48) + ((uint64_t) dataBuffer[9] << 54));
|
||||
auto timestamp = static_cast<uint64_t>(ToUInt64(&dataBuffer[2]));
|
||||
|
||||
std::array<SimpleWeatherService::Forecast::Day, SimpleWeatherService::MaxNbForecastDays> days;
|
||||
const uint8_t nbDaysInBuffer = dataBuffer[10];
|
||||
|
@ -54,19 +55,13 @@ namespace {
|
|||
return SimpleWeatherService::Forecast {timestamp, nbDays, days};
|
||||
}
|
||||
|
||||
MessageType GetMessageType(const uint8_t* dataBuffer) {
|
||||
switch (dataBuffer[0]) {
|
||||
case 0:
|
||||
return MessageType::CurrentWeather;
|
||||
break;
|
||||
case 1:
|
||||
return MessageType::Forecast;
|
||||
break;
|
||||
default:
|
||||
MessageType GetMessageType(const uint8_t* data) {
|
||||
auto messageType = static_cast<MessageType>(*data);
|
||||
if(messageType > MessageType::Unknown) {
|
||||
return MessageType::Unknown;
|
||||
break;
|
||||
}
|
||||
return messageType;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t GetVersion(const uint8_t* dataBuffer) {
|
||||
return dataBuffer[1];
|
||||
|
@ -154,7 +149,3 @@ bool SimpleWeatherService::CurrentWeather::operator==(const SimpleWeatherService
|
|||
return this->iconId == other.iconId && this->temperature == other.temperature && this->timestamp == other.timestamp &&
|
||||
this->maxTemperature == other.maxTemperature && this->minTemperature == other.maxTemperature;
|
||||
}
|
||||
|
||||
bool SimpleWeatherService::CurrentWeather::operator!=(const SimpleWeatherService::CurrentWeather& other) const {
|
||||
return !operator==(other);
|
||||
}
|
||||
|
|
|
@ -85,7 +85,6 @@ namespace Pinetime {
|
|||
char location[33]; // 32 char + \0 (end of string)
|
||||
|
||||
bool operator==(const CurrentWeather& other) const;
|
||||
bool operator!=(const CurrentWeather& other) const;
|
||||
};
|
||||
|
||||
struct Forecast {
|
||||
|
|
|
@ -68,7 +68,7 @@
|
|||
"sources": [
|
||||
{
|
||||
"file": "FontAwesome5-Solid+Brands+Regular.woff",
|
||||
"range": "0xf185, 0xf6c4, 0xf743, 0xf740, 0xf75f, 0xf0c2, 0xf05e"
|
||||
"range": "0xf185, 0xf6c4, 0xf743, 0xf740, 0xf75f, 0xf0c2, 0xf05e, 0xf73b, 0xf0e7, 0xf2dc"
|
||||
}
|
||||
],
|
||||
"bpp": 1,
|
||||
|
|
|
@ -5,8 +5,6 @@
|
|||
|
||||
using namespace Pinetime::Applications::Screens;
|
||||
|
||||
constexpr int Pinetime::Applications::Screens::StopWatch::maxLapCount;
|
||||
|
||||
namespace {
|
||||
TimeSeparated_t convertTicksToTimeSegments(const TickType_t timeElapsed) {
|
||||
// Centiseconds
|
||||
|
|
|
@ -45,6 +45,9 @@ namespace Pinetime {
|
|||
static constexpr const char* cloudShowersHeavy = "\xEF\x9D\x80";
|
||||
static constexpr const char* smog = "\xEF\x9D\x9F";
|
||||
static constexpr const char* cloud = "\xEF\x83\x82";
|
||||
static constexpr const char* cloud_meatball = "\xEF\x9C\xBB";
|
||||
static constexpr const char* bolt = "\xEF\x83\xA7";
|
||||
static constexpr const char* snowflake = "\xEF\x8B\x9C";
|
||||
static constexpr const char* ban = "\xEF\x81\x9E";
|
||||
|
||||
// lv_font_sys_48.c
|
||||
|
|
|
@ -55,14 +55,14 @@ namespace {
|
|||
return Symbols::cloud;
|
||||
break;
|
||||
case Pinetime::Controllers::SimpleWeatherService::Icons::BrokenClouds:
|
||||
return Symbols::cloud;
|
||||
break; // TODO missing symbol
|
||||
return Symbols::cloud_meatball;
|
||||
break;
|
||||
case Pinetime::Controllers::SimpleWeatherService::Icons::Thunderstorm:
|
||||
return Symbols::cloud;
|
||||
break; // TODO missing symbol
|
||||
return Symbols::bolt;
|
||||
break;
|
||||
case Pinetime::Controllers::SimpleWeatherService::Icons::Snow:
|
||||
return Symbols::cloud;
|
||||
break; // TODO missing symbol
|
||||
return Symbols::snowflake;
|
||||
break;
|
||||
case Pinetime::Controllers::SimpleWeatherService::Icons::CloudShowerHeavy:
|
||||
return Symbols::cloudShowersHeavy;
|
||||
break;
|
||||
|
|
Loading…
Reference in a new issue