summaryrefslogtreecommitdiff
path: root/2004/i/nono/src/io/gpio_servo_pp.cc
diff options
context:
space:
mode:
authorschodet2004-05-09 17:56:54 +0000
committerschodet2004-05-09 17:56:54 +0000
commit24e596552a3dcde28938860ef3d34908f632c7d4 (patch)
tree1e5d94c569ecd461c7d014b93a17a62fd1d46a33 /2004/i/nono/src/io/gpio_servo_pp.cc
parent73301302d22cca6d64c4e778b5bb2681eca13c0c (diff)
Plein de changements plus :
GpioConcat GpioAsserv
Diffstat (limited to '2004/i/nono/src/io/gpio_servo_pp.cc')
-rw-r--r--2004/i/nono/src/io/gpio_servo_pp.cc111
1 files changed, 29 insertions, 82 deletions
diff --git a/2004/i/nono/src/io/gpio_servo_pp.cc b/2004/i/nono/src/io/gpio_servo_pp.cc
index 36f9334..1e1036d 100644
--- a/2004/i/nono/src/io/gpio_servo_pp.cc
+++ b/2004/i/nono/src/io/gpio_servo_pp.cc
@@ -26,11 +26,12 @@
#include "config/config.h"
#include <iomanip>
+#include <stdexcept>
/// Constructeur.
GpioServoPp::GpioServoPp (void)
- : outputs_ (0), inputs_ (0), lastInputRequestSend_ (-10000),
- lastInputRecv_ (-10000), serial_ (true), ttyspeed_ (0),
+ : outputs_ (0), inputs_ (0),
+ serial_ (true), ttyspeed_ (0),
log_ ("io", "pp")
{
Config rc ("rc/gpio_servo_pp");
@@ -38,7 +39,7 @@ GpioServoPp::GpioServoPp (void)
{
if (!(
rc.get ("tty", ttyname_) ||
- rc.get ("ttyspeed", ttyspeed_) ||
+ rc.get ("ttyspeed", ttyspeed_)
))
rc.noId ();
}
@@ -61,18 +62,11 @@ GpioServoPp::set (int n, unsigned int bits, int nb)
unsigned int mask = (1 << nb) - 1;
bits <<= n;
outputs_ = (outputs_ & ~mask) | (bits & mask) | 0x80;
- serial.putchar (outputs_);
+ serial_.putchar (outputs_);
log_ (Log::debug) << "send " << std::hex << outputs_ << std::dec <<
std::endl;
}
-/// Change une sortie.
-void
-GpioServoPp::set (int n, unsigned int bit)
-{
- set (n, bit, 1);
-}
-
/// Lit plusieurs entrées.
unsigned int
GpioServoPp::get (int n, int nb)
@@ -84,81 +78,14 @@ GpioServoPp::get (int n, int nb)
return bits;
}
-/// Lit une entrée.
-unsigned int
-GpioServoPp::get (int n)
-{
- return get (n, 1);
-}
-
-/// Pré-lit plusieurs entrées.
-bool
-GpioServoPp::preget (int n, int nb)
-{
- int date = Date::getInstance ().start ();
- if (lastInputRecv_ + inputValidityTimeout_ > date)
- {
- // Donnée prête.
- return true;
- }
- else
- {
- // Donnée périmée.
- // Lit tout ce qui arrive du port serie.
- int c;
- while ((c = serial_.getchar ()) != -1)
- {
- log_ (Log::debug) << "recv " << std::hex << c << std::dec <<
- std::endl;
- inputs_ = c;
- lastInputRecv_ = date;
- }
- // Si le dernier envois est assez recent, on garde ce qu'on a recu.
- if (lastInputRequestSend_ + inputRequestTimeout_ > date)
- {
- return true;
- }
- else
- {
- lastInputRecv_ = -10000;
- lastInputRequestSend_ = date;
- serial_.putchar (0xff);
- log_ (Log::debug) << "recv " << std::hex << 0xff << std::dec <<
- std::endl;
- return false;
- }
- }
-}
-
-/// Pré-lit une entrée.
-bool
-GpioServoPp::preget (int n)
-{
- return preget (n, 1);
-}
-
-/// Change la direction de plusieurs I/O.
-void
-GpioServoPp::dir (int n, unsigned int bits, int nb)
-{
- throw std::invalid_argument ("GpioServoPp::dir: Operation not supported");
-}
-
-/// Change la direction d'un I/O (1 pour I, 0 pour O).
-void
-GpioServoPp::dir (int n, unsigned int bit)
-{
- dir (n, bit, 1);
-}
-
/// Bouge un servo de DIFF.
void
GpioServoPp::move (int n, int diff)
{
- n %= servoPos_;
+ n %= nbServo_;
servoPos_[n] += diff;
int v = n << 7 | servoPos_[n];
- serial.putchar (v);
+ serial_.putchar (v);
log_ (Log::debug) << "send " << std::hex << v << std::dec << std::endl;
}
@@ -166,10 +93,30 @@ GpioServoPp::move (int n, int diff)
void
GpioServoPp::moveTo (int n, int pos)
{
- n %= servoPos_;
+ n %= nbServo_;
servoPos_[n] = pos;
int v = n << 7 | servoPos_[n];
- serial.putchar (v);
+ serial_.putchar (v);
log_ (Log::debug) << "send " << std::hex << v << std::dec << std::endl;
}
+/// Met à jour.
+void
+GpioServoPp::update (void)
+{
+ int c;
+ while ((c = serial_.getchar ()) != -1)
+ {
+ log_ (Log::debug) << "recv " << std::hex << c << std::dec <<
+ std::endl;
+ inputs_ = c;
+ }
+}
+
+/// Récupère le nombre d'entrées/sorties.
+int
+GpioServoPp::getNbIo (void)
+{
+ return nbOutputs_ + nbInputs_;
+}
+