No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

core_simulation.h 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. #ifndef CORE_SIMULATEUR_H
  2. #define CORE_SIMULATEUR_H
  3. #include <iostream>
  4. #include <string>
  5. #include <thread>
  6. #include <mutex>
  7. #define DELAY 3
  8. #define TEMP 17
  9. #define PRESSURE 2995
  10. #define HIGH 1
  11. #define LOW 0
  12. #define MAX_I2C_DEVICES 4
  13. #define I2C_BUFFER_SIZE 1024
  14. #define MAX_IO_PIN 10
  15. using namespace std;
  16. enum typeio {OUTPUT, INPUT};
  17. // exceptions gerees
  18. enum excep {SPEED, INOUT, ADDRESS, SIZE, EMPTY};
  19. class BoardException{
  20. protected:
  21. // numero de l'exception
  22. int num;
  23. public:
  24. BoardException(int i):num(i){}
  25. // recuperation du numero d'exception
  26. int get();
  27. // chaine expliquant l'exception
  28. string text();
  29. };
  30. // gestion de la liaison terminal
  31. class Terminal {
  32. public :
  33. // fonction arduino : initialisation de la liaison
  34. void begin(int speed);
  35. // fonction arduino : affichage sur le terminal
  36. void println(string s);
  37. };
  38. // representatoin du bus I2C
  39. class I2C{
  40. protected:
  41. // zone memoire d'echange pour chaque element connecte sur le bus
  42. char * registre[MAX_I2C_DEVICES];
  43. // etat de la zone memoire d'echange pour chaque element vide ou pas
  44. bool vide[MAX_I2C_DEVICES];
  45. // outil pour eviter les conflits en lecture ecriture sur le bus
  46. mutex tabmutex[MAX_I2C_DEVICES];
  47. public:
  48. // constructeur des différents attributs: memoire, etat et synchonisation
  49. I2C();
  50. // est ce qu il y a quelque chose a lire pour le device numero addr
  51. bool isEmptyRegister(int addr);
  52. // ecriture d'un ensemble d'octets dansle registre du device numero addr
  53. int write(int addr, char* bytes, int size);
  54. // lecture d'un ensemble d'octets dans le registre du device numero addr
  55. int requestFrom(int addr, char* bytes, int size);
  56. // recuperation de la zone memoire du registre du device numero addr
  57. char * getRegistre(int addr);
  58. // est ce que le registre du device numero addr EST VIDE
  59. bool* getVide(int addr);
  60. };
  61. // representation generique d'un capteur ou d'un actionneur numerique, analogique ou sur le bue I2C
  62. class Device{
  63. protected:
  64. // lien avec la carte pour lire/ecrire une valeur
  65. unsigned short *ptrmem;
  66. // lien avec la carte pour savoir si c'est une pin en entree ou en sortie
  67. enum typeio *ptrtype;
  68. // numero sur le bus i2c
  69. int i2caddr;
  70. // lien sur l'objet representant le bus I2C
  71. I2C *i2cbus;
  72. public:
  73. // constructeur initialisant le minimum
  74. Device();
  75. // boucle simulant l'equipement
  76. virtual void run();
  77. // lien entre le device et la carte arduino
  78. void setPinMem(unsigned short* ptr,enum typeio *c);
  79. // lien entre le device I2C et la carte arduino
  80. void setI2CAddr(int addr, I2C * bus);
  81. };
  82. // classe representant une carte arduino
  83. class Board{
  84. public:
  85. static int luminosite_environnement;
  86. // valeur sur les pin
  87. unsigned short io[MAX_IO_PIN];
  88. // pin d'entree ou de sortie
  89. enum typeio stateio[MAX_IO_PIN];
  90. // threads representant chaque senseur/actionneur sur le pins analogique et digitale
  91. thread *tabthreadpin[MAX_IO_PIN];
  92. // representation du bus I2C
  93. I2C bus;
  94. // representation de la liaison terminal
  95. Terminal Serial;
  96. // threads representant chaque senseur/actionneur sur le bus I2C
  97. thread *tabthreadbus[MAX_I2C_DEVICES];
  98. // simulation de la boucle de controle arduino
  99. void run();
  100. // accroachage d'un senseur/actionneur à une pin
  101. void pin(int p, Device& s);
  102. // accroachage d'un senseur/actionneur à une adresse du bus I2C
  103. void i2c(int addr,Device& dev);
  104. // fonction arduino : configuration d'une pin en entree ou en sortie
  105. void pinMode(int p,enum typeio t);
  106. // fonction arduino : ecriture HIGH ou LOW sur une pin
  107. void digitalWrite(int i, int l);
  108. // fonction arduino : lecture digital sur une pin
  109. int digitalRead(int i);
  110. // fonction arduino : lecture analogique sur une pin
  111. void analogWrite(int i, int l);
  112. // fonction arduino : ecriture analogique sur une pin
  113. int analogRead(int i);
  114. // fonction arduino : initialisation de la carte arduino
  115. void setup();
  116. // fonction arduino : boucle de controle de la carte arduino
  117. void loop();
  118. void TemperatureManagement();
  119. void PressureManagement();
  120. };
  121. #endif