Skip to content
/ osd Public

Commit e6b5dbc

Browse files
committed
Distinguishing ARM soft/hard-float configurations, detaching the SoC temperature readings
1 parent 5d69a8e commit e6b5dbc

File tree

10 files changed

+69
-16
lines changed

10 files changed

+69
-16
lines changed

src/error.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#pragma once
22

33
#include "hal/support.h"
4+
#include "hal/hisi/v4_sys.h"
45

56
char *errstr(int error);

src/hal/hisi/v1_hal.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#if defined(__ARM_PCS)
1+
#if defined(__arm__) && !defined(__ARM_PCS_VFP)
22

33
#include "v1_hal.h"
44

src/hal/hisi/v2_hal.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#if defined(__ARM_PCS)
1+
#if defined(__arm__) && !defined(__ARM_PCS_VFP)
22

33
#include "v2_hal.h"
44

src/hal/hisi/v3_hal.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#if defined(__ARM_PCS)
1+
#if defined(__arm__) && !defined(__ARM_PCS_VFP)
22

33
#include "v3_hal.h"
44

src/hal/hisi/v4_hal.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#if defined(__ARM_PCS)
1+
#if defined(__arm__) && !defined(__ARM_PCS_VFP)
22

33
#include "v4_hal.h"
44

src/hal/support.c

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ char family[32] = {0};
77
hal_platform plat = HAL_PLATFORM_UNK;
88
int series = 0;
99

10+
unsigned long long lastMillisTemp = 0;
11+
float lastReadTemp = 0.0 / 0.0;
12+
1013
void hal_identify(void) {
1114
unsigned int val = 0;
1215
FILE *file;
@@ -96,7 +99,7 @@ void hal_identify(void) {
9699
}
97100
#endif
98101

99-
#if defined(__ARM_PCS)
102+
#if defined(__arm__) && !defined(__ARM_PCS_VFP)
100103
if (file = fopen("/proc/iomem", "r")) {
101104
while (fgets(line, 200, file))
102105
if (strstr(line, "uart")) {
@@ -181,4 +184,47 @@ void hal_identify(void) {
181184
strcpy(family, "hisi-gen4");
182185
chnCount = V4_VENC_CHN_NUM;
183186
#endif
187+
}
188+
189+
float hal_temperature_read(void) {
190+
if (lastReadTemp != (0.0 / 0.0) && (millis() - lastMillisTemp < 5000))
191+
return lastReadTemp;
192+
193+
lastMillisTemp = millis();
194+
195+
switch (plat) {
196+
#if defined(__ARM_PCS_VFP)
197+
case HAL_PLATFORM_I6:
198+
case HAL_PLATFORM_I6C:
199+
case HAL_PLATFORM_M6:
200+
{
201+
FILE* file;
202+
char line[20] = {0};
203+
if (file = fopen("/sys/class/mstar/msys/TEMP_R", "r")) {
204+
fgets(line, 20, file);
205+
char *remain, *parsed = strstr(line, "Temperature ");
206+
lastReadTemp = strtof(parsed + 12, &remain);
207+
fclose(file);
208+
}
209+
break;
210+
}
211+
#elif defined(__arm__) && !defined(__ARM_PCS_VFP)
212+
case HAL_PLATFORM_V2: lastReadTemp = v2_system_readtemp(); break;
213+
case HAL_PLATFORM_V3: lastReadTemp = v3_system_readtemp(); break;
214+
case HAL_PLATFORM_V4: lastReadTemp = v4_system_readtemp(); break;
215+
#endif
216+
default:
217+
if (!access("/sys/class/thermal/thermal_zone0/temp", F_OK)) {
218+
FILE* file;
219+
char line[10] = {0};
220+
if (file = fopen("/sys/class/thermal/thermal_zone0/temp", "r")) {
221+
fgets(line, 10, file);
222+
lastReadTemp = strtof(line, NULL) / 1000.0;
223+
fclose(file);
224+
}
225+
} else lastMillisTemp = UINT64_MAX;
226+
break;
227+
}
228+
229+
return lastReadTemp;
184230
}

src/hal/support.h

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
#include "tools.h"
22
#include "types.h"
33

4+
#if defined(__ARM_PCS_VFP)
5+
#include "star/i6_hal.h"
6+
#include "star/i6c_hal.h"
7+
#include "star/m6_hal.h"
8+
#elif defined(__arm__) && !defined(__ARM_PCS_VFP)
49
#include "hisi/v1_hal.h"
510
#include "hisi/v2_hal.h"
611
#include "hisi/v3_hal.h"
712
#include "hisi/v4_hal.h"
8-
#include "star/i6_hal.h"
9-
#include "star/i6c_hal.h"
10-
#include "star/m6_hal.h"
13+
#endif
1114

1215
#include <linux/version.h>
1316
#include <stdbool.h>
@@ -35,4 +38,5 @@ extern char family[32];
3538
extern hal_platform plat;
3639
extern int series;
3740

38-
void hal_identify(void);
41+
void hal_identify(void);
42+
float hal_temperature_read(void);

src/main.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ int main(int argc, char *argv[]) {
5353
case HAL_PLATFORM_I6: i6_hal_init(); break;
5454
case HAL_PLATFORM_I6C: i6c_hal_init(); break;
5555
case HAL_PLATFORM_M6: m6_hal_init(); break;
56-
#elif defined(__ARM_PCS)
56+
#elif defined(__arm__) && !defined(__ARM_PCS_VFP)
5757
case HAL_PLATFORM_V1: v1_hal_init(); break;
5858
case HAL_PLATFORM_V2: v2_hal_init(); break;
5959
case HAL_PLATFORM_V3: v3_hal_init(); break;
@@ -78,7 +78,7 @@ int main(int argc, char *argv[]) {
7878
case HAL_PLATFORM_I6: i6_hal_deinit(); break;
7979
case HAL_PLATFORM_I6C: i6c_hal_deinit(); break;
8080
case HAL_PLATFORM_M6: m6_hal_deinit(); break;
81-
#elif defined(__ARM_PCS)
81+
#elif defined(__arm__) && !defined(__ARM_PCS_VFP)
8282
case HAL_PLATFORM_V1: v1_hal_deinit(); break;
8383
case HAL_PLATFORM_V2: v2_hal_deinit(); break;
8484
case HAL_PLATFORM_V3: v3_hal_deinit(); break;

src/region.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -399,7 +399,7 @@ found_font:;
399399
m6_region_create(id, rect, osds[id].opal);
400400
m6_region_setbitmap(id, &bitmap);
401401
break;
402-
#elif defined(__ARM_PCS)
402+
#elif defined(__arm__) && !defined(__ARM_PCS_VFP)
403403
case HAL_PLATFORM_V1:
404404
v1_region_create(id, rect, osds[id].opal);
405405
v1_region_setbitmap(id, &bitmap);
@@ -453,7 +453,7 @@ found_font:;
453453
m6_region_create(id, rect, osds[id].opal);
454454
m6_region_setbitmap(id, &bitmap);
455455
break;
456-
#elif defined(__ARM_PCS)
456+
#elif defined(__arm__) && !defined(__ARM_PCS_VFP)
457457
case HAL_PLATFORM_V1:
458458
v1_region_create(id, rect, osds[id].opal);
459459
v1_region_setbitmap(id, &bitmap);
@@ -481,7 +481,7 @@ found_font:;
481481
case HAL_PLATFORM_I6: i6_region_destroy(id); break;
482482
case HAL_PLATFORM_I6C: i6c_region_destroy(id); break;
483483
case HAL_PLATFORM_M6: m6_region_destroy(id); break;
484-
#elif defined(__ARM_PCS)
484+
#elif defined(__arm__) && !defined(__ARM_PCS_VFP)
485485
case HAL_PLATFORM_V1: v1_region_destroy(id); break;
486486
case HAL_PLATFORM_V2: v2_region_destroy(id); break;
487487
case HAL_PLATFORM_V3: v3_region_destroy(id); break;

src/server.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -494,8 +494,10 @@ void respond_request(struct Request *req) {
494494
"Content-Type: application/json;charset=UTF-8\r\n"
495495
"Connection: close\r\n"
496496
"\r\n"
497-
"{\"chip\":\"%s\",\"loadavg\":[%.2f,%.2f,%.2f],\"memory\":\"%s\",\"uptime\":\"%s\"}",
498-
chip, si.loads[0] / 65536.0, si.loads[1] / 65536.0, si.loads[2] / 65536.0, memory, uptime);
497+
"{\"chip\":\"%s\",\"loadavg\":[%.2f,%.2f,%.2f],\"memory\":\"%s\","
498+
"\"temp\":\"%.1f\u00B0C\",\"uptime\":\"%s\"}",
499+
chip, si.loads[0] / 65536.0, si.loads[1] / 65536.0, si.loads[2] / 65536.0,
500+
memory, hal_temperature_read(), uptime);
499501
send_and_close(req->clntFd, response, respLen);
500502
return;
501503
}

0 commit comments

Comments
 (0)