summaryrefslogtreecommitdiff
path: root/digital/io/src/asserv.h
blob: a4c680afa77d2c681cbda313918aef4c8f7191bc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#ifndef asserv_h
#define asserv_h
/* asserv.h */
/* io - Input & Output with Artificial Intelligence (ai) support on AVR. {{{
 *
 * Copyright (C) 2008 Dufour J�r�my
 *
 * APBTeam:
 *        Web: http://apbteam.org/
 *      Email: team AT apbteam DOT org
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 *
 * }}} */

/**
 * @file Control the asserv board from io using the TWI protocol.
 * This files contains the 'public' functions to send commands to the asserv
 * board using a protocol over TWI communication.
 * @see trunk/digital/io/doc/proto_asserv.txt
 * @todo
 *  - protect code from sending a command when the previous one is not
 *  finished yet.
 *  - a consequence of previous item is that commands can failed. Maybe all
 *  return values should be 'uint8_t'.
 */

#include "common.h"

/**
 * Initialize the asserv control module.
 * This functions does not initialize the asserv board, but the underling
 * communication protocol used to communicate with the asserv (TWI).
 */
void
asserv_init (void);

/**
 * Reset the asserv board.
 * Other class command.
 */
void
asserv_reset (void);

/**
 * Free the motors (stop controlling them).
 * Other class command.
 */
void
asserv_free_motor (void);

/**
 * Stop the motor (and the bot).
 * Other class command.
 */
void
asserv_stop_motor (void);

/**
 * Move linearly.
 * Move class command.
 * @param distance the distance to move (in step).
 */
void
asserv_move_linearly (int32_t distance);

/**
 * Move angularly (turn).
 * Move class command.
 * @param angle the angle to turn.
 */
void
asserv_move_angularly (int16_t angle);

/**
 * Go to the wall (moving backward).
 * Move class command.
 */
void
asserv_go_to_the_wall (void);

/**
 * Move forward to approach a gutter.
 * Move class command.
 */
void
asserv_go_to_gutter (void);

/**
 * Move the arm.
 * A complete rotation correspond to 5000 steps.
 * Arm class command.
 * @param position desired goal position (in step).
 * @param speed speed of the movement.
 */
void
asserv_move_arm (uint16_t position, uint8_t speed);

/**
 * Set current X position.
 * Other class command.
 * @param x X position.
 */
void
asserv_set_x_position (int32_t x);

/**
 * Set current Y position.
 * Other class command.
 * @param y Y position.
 */
void
asserv_set_y_position (int32_t y);

/**
 * Set current angular position.
 * Other class command.
 * @param angle angular position.
 */
void
asserv_set_angle_position (int16_t angle);

/**
 * Set speeds of movements.
 * Other class command.
 * @param linear_high linear high speed
 * @param angular_high angular high speed
 * @param linear_low linear low speed
 * @param angular_low angular low speed
 */
void
asserv_set_speed (uint8_t linear_high, uint8_t angular_high,
		  uint8_t linear_low, uint8_t angular_low);

#endif /* asserv_h */