GeekTrack/2.Firmware/components/GeekOS/Pages/SystemInfos/SystemInfosModel.cpp

180 lines
3.6 KiB
C++

#include <stdio.h>
#include <memory.h>
#include "SystemInfosModel.h"
#include "System/HAL/HAL.h"
using namespace Page;
void SystemInfosModel::Init()
{
account = new Account("SystemInfosModel", DataProc::Center(), 0, this);
//account->Subscribe("SportStatus");
//account->Subscribe("GPS");
account->Subscribe("MAG");
account->Subscribe("IMU");
//account->Subscribe("Clock");
//account->Subscribe("Power");
//account->Subscribe("Storage");
//account->Subscribe("StatusBar");
}
void SystemInfosModel::Deinit()
{
if (account)
{
delete account;
account = nullptr;
}
}
void SystemInfosModel::GetSportInfo(
float* trip,
char* time, uint32_t len,
float* maxSpd
)
{
SportStatus_Info_t sport;
memset(&sport,0,sizeof(SportStatus_Info_t));
account->Pull("SportStatus", &sport, sizeof(sport));
*trip = sport.totalDistance / 1000;
DataProc::MakeTimeString(sport.totalTime, time, len);
*maxSpd = sport.speedMaxKph;
}
void SystemInfosModel::GetGPSInfo(
float* lat,
float* lng,
float* alt,
char* utc, uint32_t len,
float* course,
float* speed
)
{
GPS_Info_t gps;
memset(&gps,0,sizeof(GPS_Info_t));
account->Pull("GPS", &gps, sizeof(gps));
*lat = (float)gps.latitude;
*lng = (float)gps.longitude;
*alt = gps.altitude;
snprintf(
utc, len,
"%d-%d-%d\n%02d:%02d:%02d",
gps.clock.year,
gps.clock.month,
gps.clock.day,
gps.clock.hour,
gps.clock.minute,
gps.clock.second
);
*course = gps.course;
*speed = gps.speed;
}
void SystemInfosModel::GetMAGInfo(
char* info, uint32_t len
)
{
MAG_Info_t mag;
memset(&mag,0,sizeof(MAG_Info_t));
account->Pull("MAG", &mag, sizeof(mag));
snprintf(
info,
len,
"%0.1f deg\n%d\n%d\n%d",
0.0f,
mag.x,
mag.y,
mag.z
);
}
void SystemInfosModel::GetIMUInfo(
int* step,
char* info, uint32_t len
)
{
IMU_Info_t imu;
memset(&imu,0,sizeof(IMU_Info_t));
account->Pull("IMU", &imu, sizeof(imu));
*step = imu.steps;
snprintf(
info,
len,
"%.2f\n%.2f\n%.2f\n%.2f\n%.2f\n%.2f",
imu.acc[0],
imu.acc[1],
imu.acc[2],
imu.gyr[0],
imu.gyr[1],
imu.gyr[2]
);
}
void SystemInfosModel::GetRTCInfo(
char* dateTime, uint32_t len
)
{
Clock_Info_t clock;
memset(&clock,0,sizeof(Clock_Info_t));
account->Pull("Clock", &clock, sizeof(clock));
snprintf(
dateTime,
len,
"%d-%d-%d\n%02d:%02d:%02d",
clock.year,
clock.month,
clock.day,
clock.hour,
clock.minute,
clock.second
);
}
void SystemInfosModel::GetBatteryInfo(
char* info,
uint32_t len
)
{
Power_Info_t power;
memset(&power,0,sizeof(Power_Info_t));
Power_GetInfo(&power);
snprintf(
info, len,
"\n%d%% \n%0.2f V\n%s",
power.usage,
(power.voltage / 1000.0f),
"DISCHARGE"
);
}
void SystemInfosModel::GetStorageInfo(
bool* detect,
const char** type,
const char** name,
char* usage, uint32_t len
)
{
*detect = SD_GetReady();
*type = SD_GetTypeName();
*name = SD_GetCardName();
snprintf(
usage, len,
"%0.1f GB",
SD_GetCardSizeMB() / 1024.0f
);
}
void SystemInfosModel::SetStatusBarStyle(DataProc::StatusBar_Style_t style)
{
DataProc::StatusBar_Info_t info;
DATA_PROC_INIT_STRUCT(info);
info.cmd = DataProc::STATUS_BAR_CMD_SET_STYLE;
info.param.style = style;
account->Notify("StatusBar", &info, sizeof(info));
}