Skip to content

Commit 8763a8c

Browse files
bradjcalevy
authored andcommitted
libtock-sync: temperature: use yield-waitfor
1 parent 8bd3e45 commit 8763a8c

File tree

5 files changed

+30
-23
lines changed

5 files changed

+30
-23
lines changed

libtock-sync/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ $(LIBNAME)_SRCS += $(wildcard $($(LIBNAME)_DIR)/kernel/*.c)
1616
$(LIBNAME)_SRCS += $(wildcard $($(LIBNAME)_DIR)/net/*.c)
1717
$(LIBNAME)_SRCS += $(wildcard $($(LIBNAME)_DIR)/peripherals/*.c)
1818
$(LIBNAME)_SRCS += $(wildcard $($(LIBNAME)_DIR)/sensors/*.c)
19+
$(LIBNAME)_SRCS += $(wildcard $($(LIBNAME)_DIR)/sensors/syscalls/*.c)
1920
$(LIBNAME)_SRCS += $(wildcard $($(LIBNAME)_DIR)/services/*.c)
2021
$(LIBNAME)_SRCS += $(wildcard $($(LIBNAME)_DIR)/storage/*.c)
2122

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#include "temperature_syscalls.h"
2+
3+
returncode_t libtocksync_temperature_yield_wait_for(int* temp) {
4+
yield_waitfor_return_t ret;
5+
ret = yield_wait_for(DRIVER_NUM_TEMPERATURE, 0);
6+
7+
*temp = (int) ret.data0;
8+
return RETURNCODE_SUCCESS;
9+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#pragma once
2+
3+
#include <libtock/sensors/syscalls/temperature_syscalls.h>
4+
#include <libtock/tock.h>
5+
6+
#ifdef __cplusplus
7+
extern "C" {
8+
#endif
9+
10+
// Wait for a temperature read to finish.
11+
returncode_t libtocksync_temperature_yield_wait_for(int* temp);
12+
13+
#ifdef __cplusplus
14+
}
15+
#endif

libtock-sync/sensors/temperature.c

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,13 @@
11
#include "temperature.h"
22

3-
struct data {
4-
bool fired;
5-
int temp;
6-
returncode_t result;
7-
};
8-
9-
static struct data result = { .fired = false };
10-
11-
static void temp_cb(returncode_t ret, int temperature) {
12-
result.temp = temperature;
13-
result.fired = true;
14-
result.result = ret;
15-
}
16-
173
returncode_t libtocksync_temperature_read(int* temperature) {
184
returncode_t err;
19-
result.fired = false;
205

21-
err = libtock_temperature_read(temp_cb);
6+
err = libtock_temperature_command_read();
227
if (err != RETURNCODE_SUCCESS) return err;
238

24-
// Wait for the callback.
25-
yield_for(&result.fired);
26-
if (result.result != RETURNCODE_SUCCESS) return result.result;
27-
28-
*temperature = result.temp;
9+
// Wait for the operation to finish.
10+
err = libtocksync_temperature_yield_wait_for(temperature);
2911

30-
return RETURNCODE_SUCCESS;
12+
return err;
3113
}

libtock-sync/sensors/temperature.h

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

3-
#include <libtock/sensors/temperature.h>
3+
#include "syscalls/temperature_syscalls.h"
44
#include <libtock/tock.h>
55

66
#ifdef __cplusplus

0 commit comments

Comments
 (0)