summaryrefslogtreecommitdiff
path: root/i/chuck/src/es/es.hh
diff options
context:
space:
mode:
Diffstat (limited to 'i/chuck/src/es/es.hh')
-rw-r--r--i/chuck/src/es/es.hh207
1 files changed, 207 insertions, 0 deletions
diff --git a/i/chuck/src/es/es.hh b/i/chuck/src/es/es.hh
new file mode 100644
index 0000000..0a53ff3
--- /dev/null
+++ b/i/chuck/src/es/es.hh
@@ -0,0 +1,207 @@
+#ifndef es_hh
+#define es_hh
+// es.hh
+// robert - programme du robot 2005 {{{
+//
+// Copyright (C) 2005 Nicolas Haller
+//
+// Robot APB Team/Efrei 2005.
+// Web: http://assos.efrei.fr/robot/
+// Email: robot AT efrei DOT fr
+//
+// 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.
+//
+// }}}
+
+#include "proto/proto.hh"
+
+#include <string>
+#include <vector>
+
+class Config;
+
+/// Gère la carte es et ses capteurs et actionneurs
+class Es : public Proto::Receiver
+{
+ public:
+ enum etatBarillet{empty,white,black};
+ enum posBar{avant0 = 0x00, arriere2 = 0x04, avant4 = 0x08, arriere1 =
+ 0x0C, avant3 = 0x10, arriere0 = 0x14, avant2 = 0x18, arriere4 = 0x1C,
+ avant1 = 0x20, arriere3 = 0x24};
+ typedef std::vector<int> Sharps;
+
+ private:
+ // Objet Proto de communication vers la carte es
+ Proto proto_;
+ // le tty est ...
+ std::string tty_;
+ /// Système de log
+ Log log_;
+ /// For LCD communication
+ char lcd_mess_char_[16];
+ /// Key pressed by the LCD Keyboard
+ int lcdKeyPressed_, lcdKeyStat_;
+ /// Frontal choc !
+ bool front_sensor_;
+ /// Ack frequency
+ int ackFreq_;
+ /// Main stat frequency
+ int mainStat_;
+ /// Config of RVB sensors
+ int rvbSensorFalseIC_, rvbSensorMaxOv_;
+ /// Config of RVB sniff
+ int rvbSniffRefRatio_, rvbSniffGreenLimit_, rvbSniffClearLimit_;
+ /// RVB Sensors raw stats
+ int rvbSensorMaskStat_, rvbSensorStat_;
+ /// RVB Sniff stats
+ int rvbSniffMaskStat_, rvbSniffStat_;
+ /// RVB Sensors raw stats
+ int rvbBallStat_;
+ /// Sharps
+ Sharps sharps_;
+ /// Others module, jack & colour
+ bool jackIn_, colorModeBlue_;
+ int othersStat_;
+ /// Stat of front sensors
+ int rvbSniffFrontStat_;
+ int thresholdFrontSensors_, thresholdBallSensors_, thresholdHoleSensors_;
+ /// Stock du barillet
+ etatBarillet stockBarillet[5];
+ /// Position du barillet
+ posBar positionBarillet_;
+ /// System for analyse a ball
+ int seenColors_[5], lastSeenColors_[5], comptSeenColors_[5];
+ /// Si la turbine avant est allumé
+ bool frontTurbineIsFull_;
+
+ public:
+ // Some fucking defines !
+ const int unknownColor_, redColor_, blueColor_, greenColor_, whiteColor_,
+ blackColor_;
+ const int leftFrontRVB_, rightFrontRVB_, holeRVB_, frontBallRVB_,
+ rearBallRVB_;
+ /// Constructeur
+ Es (const Config & config);
+ /// On attend ...
+ bool wait (int timeout = -1);
+ /// Récupère le File Descriptor
+ int getFd (void);
+ /// définition du receiver::receive
+ void receive (char command, const Proto::Frame & frame);
+ /// sync..
+ bool sync (void);
+ /// Charge les paramètre du fichier de config
+ void loadConfig (const Config & config);
+
+ /// Initialise les capteurs et actionneurs, reset
+ void reset (void);
+ /// Stat for the main ()
+ void setMainStat (int freq);
+ /// Shut up !
+ void shutUp (void);
+ /// Set frequency of ack
+ void setAckStat (int freq);
+ /// Get the state of the jack
+ bool isJackOut (void);
+ /// Get the color mode of the button
+ bool isColorModeBlue (void);
+
+ /// Envoie de la config des sensors RVB
+ void setRVBSensorsConfig(int false_ic, int max_ov);
+ /// Envoie de la config des sniff RVB
+ void setRVBSniffConfig(int ref_ratio, int green_limit, int clear_limit);
+ /// Règle les stats des sensors RVB
+ void setRVBSensorsStat(int mask_captor, int freq);
+ /// règle la couleur actuelle comme référente
+ void refColor(int mask_captor, int mode = 0);
+ /// Règle les stats d'affichage de la couleur
+ void setRVBSniffStat (int mask_captor, int freq);
+ /// Configure statistic for the sensor of the ball
+ void setRVBBallStat (int freq);
+ /// Set frequency of front sensor in analyse mode
+ void setRVBSniffFrontStat (int freq);
+ /// Enable all the sensors or just the 4 and 1 near the ground
+ void enableAllSensors (bool enable);
+ //
+ void setRVBHoleStat (int freq);
+
+ /// Set frequency of jack, selectoul printed out function
+ /// Use this function with frequency 0 to disable this stat.
+ void setOthersStat (int freq);
+
+ /// Discute avec les servo...
+ void setServoPos (int servo_mask, int servoPos);
+
+ /// Set update frequency of sharps
+ void setSharpUpdate (int sharp_mask, int freq);
+ /// Set statistics frequency of sharps
+ void setSharpStat (int sharp_mask, int freq);
+ /// Set configuration of threshold sharps
+ void setSharpThreshold (int sharp_num, int threshold_high,
+ int threshold_low);
+
+ /// Print something on the LCD (max 32 char)
+ void lcdPrint (const std::string &message);
+ /// Get the current pressed keys of the LCD
+ void lcdGetKey (int freq);
+
+ /// Règle la vitesse des turbines
+ void setTurbineSpeed (int turbNb, int speed);
+ /// Règle le sens de rotation du barillet
+ void setTheMeaningOfRotationOfBarillet (int answer);
+ /// Init the barillet and put it at the right place
+ void barilletInit (void);
+ /// Init turbine to minimal speed
+ void barilletDebutLancement (void);
+ /// Init front turbine to full speed
+ void barilletLancement (void);
+ /// Put barillet in sleep mode
+ void barilletSleep (void);
+ /// Dépose une balle du barillet
+ void deposeBalle(void);
+ /// Dépose une balle blanche
+ bool dropWhiteBall(void);
+ /// Dépose une balle noire
+ bool dropBlackBall(void);
+ /// Place un trou vide à l'avant
+ bool setEmptyHoleFront(void);
+ /// Extrait une balle
+ void extraitBalle(void);
+ /// Rotation du barillet
+ void rotationBarillet(int posFinal);
+ /// Empty everything in the barillet
+ void barilletEmpty (void);
+ /// Say if barillet is full
+ bool barilletIsFull(void);
+ /// What color do you see my lord ?
+ int colorSeen (int sensor_num);
+ /// Totems activator
+ void totemActivator (bool out);
+ /// Front sensor
+ bool frontSensor (void) { return front_sensor_; }
+ /// Clear sensor
+ void clearFrontSensor (void) { front_sensor_ = false; }
+
+ private:
+ /// Decode a color into a string
+ std::string decodeColor (int color);
+ /// Analyse une balle arrivant par devant
+ void newBallFront (void);
+ /// Analyse une balle arrivant par derrière
+ void newBallRear (void);
+ /// Update system for one sensor
+ void updateAnalysisSensor (int value, int index, int threshold);
+};
+#endif // es_hh