Skip to content

Commit 4127d27

Browse files
committed
function that returns the number of servomotors available
1 parent db3863d commit 4127d27

File tree

3 files changed

+20
-4
lines changed

3 files changed

+20
-4
lines changed

examples/servo/main.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,13 @@ int main(void) {
1111
return -1;
1212
}
1313
returncode_t result = RETURNCODE_EOFF;
14+
uint16_t servo_number = 0;
15+
libtock_servo_number(&servo_number);
16+
printf("The number of available servomotors is: %d", servo_number);
1417
uint16_t angle = 0;
1518
uint16_t index = 0; // the first index available.
1619

20+
1721
if (libtock_current_servo_angle(index, &angle) == RETURNCODE_ENODEVICE) {
1822
printf("\n The index number is bigger than the available servomotors\n");
1923
return -1;

libtock/interface/syscalls/servo_syscalls.c

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,26 @@ bool libtock_servo_exists(void) {
55
return driver_exists(DRIVER_NUM_SERVO);
66
}
77

8+
returncode_t libtock_servo_number(uint16_t* servo_number){
9+
uint32_t value = 0;
10+
syscall_return_t r = command(DRIVER_NUM_SERVO, 1, 0, 0);
11+
// Converts the returned value stored in `r`
12+
// and assigns it to `ret`.
13+
returncode_t ret = tock_command_return_u32_to_returncode(r, &value);
14+
*servo_number = (uint16_t)value;
15+
return ret;
16+
17+
}
18+
819
returncode_t libtock_servo_angle(uint16_t index, uint16_t angle) {
9-
syscall_return_t cval = command(DRIVER_NUM_SERVO, 1, index, angle);
20+
syscall_return_t cval = command(DRIVER_NUM_SERVO, 2, index, angle);
1021
return tock_command_return_novalue_to_returncode(cval);
1122
}
1223

1324
returncode_t libtock_current_servo_angle(uint16_t index, uint16_t* angle) {
1425
uint32_t value = 0;
15-
syscall_return_t r = command(DRIVER_NUM_SERVO, 2, index, 0);
16-
// Converts the value returned by the servo, stored in `r`,
26+
syscall_return_t r = command(DRIVER_NUM_SERVO, 3, index, 0);
27+
// Converts the value returned by the servo, stored in `r`
1728
// and assigns it to `ret`.
1829
returncode_t ret = tock_command_return_u32_to_returncode(r, &value);
1930
*angle = (uint16_t)value;

libtock/interface/syscalls/servo_syscalls.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ extern "C" {
1010

1111
// Check if the servo system call driver is available on this board.
1212
bool libtock_servo_exists(void);
13-
13+
// Returns the number of available servomotors.
14+
returncode_t libtock_servo_number(uint16_t* servo_number);
1415
// Change the angle.
1516
returncode_t libtock_servo_angle(uint16_t index, uint16_t angle );
1617
// Requests the current angle from the servo.

0 commit comments

Comments
 (0)