180 lines
3.6 KiB
C++
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));
|
||
|
}
|