Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 2:d1c24eae74d5, committed 2018-09-16
- Comitter:
- citolin
- Date:
- Sun Sep 16 17:28:48 2018 +0000
- Parent:
- 1:cca3a4e419dd
- Commit message:
- Added a mutex in the state memory space. Also added a example for power supply station.
Changed in this revision
| Autoline/Autoline.cpp | Show annotated file Show diff for this revision Revisions of this file |
| Autoline/Autoline.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/Autoline/Autoline.cpp Sun Sep 16 16:36:04 2018 +0000
+++ b/Autoline/Autoline.cpp Sun Sep 16 17:28:48 2018 +0000
@@ -20,6 +20,13 @@
Autoline::~Autoline() { }
+// It needs a mutex because it's a variable controlled over two threads (ethernet thread and main thread)
+void Autoline::set_state(short int newState) {
+ _mutex.lock();
+ state = newState;
+ _mutex.unlock();
+}
+
void Autoline::print_queue() {
pc.printf("[AUTOLINE - QUEUE] Queue size: %d\n",queue.size());
for(int i=0;i<queue.size();i++)
@@ -102,8 +109,14 @@
// Read the input I/Os (bitset from 0 to 4)
std::string cmmd1 = read_ios_in_range(0,4);
+ cmmd1 = "{1;" + cmmd1 + "}";
pc.printf("CMMD1 - %s\n", cmmd1);
+
+
+ // Send through the network
+ connection.send((char*)cmmd1.c_str(),cmmd1.size());
+
break;
}
@@ -136,9 +149,14 @@
//pc.printf("CMMD 4\n");
std::string cmmd4 = read_ios_in_range(5,9);
+ cmmd4 = "{4;" + cmmd4 + "}";
// Read the output I/Os (bitset from 5 to 9)
pc.printf("CMMD4 - %s\n", cmmd4);
+
+ // Send through the network
+ connection.send((char*)cmmd4.c_str(),cmmd4.size());
+
break;
}
@@ -146,7 +164,7 @@
pc.printf("CMMD 5\n");
// Enter MAINTENANCE MODE.
- state = MAINTENANCE_MODE;
+ set_state(MAINTENANCE_MODE);
// code here ...
break;
@@ -155,7 +173,7 @@
pc.printf("CMMD 6\n");
// Enter AUTOMATIC MODE.
- state = AUTOMATIC_MODE;
+ set_state(AUTOMATIC_MODE);
// code here ...
break;
@@ -181,7 +199,7 @@
case CMMD_P: {
// CMMD P - { P X } X - Enter pause mode or not. (1 or 0). 1 for pause mode 0 to leave pause mode.
- state = PAUSED_MODE;
+ set_state(PAUSED_MODE);
// code here ...
break;
@@ -190,8 +208,21 @@
case CMMD_E: {
pc.printf("CMMD E\n");
// CMMD E - { E } - IHM wants to know if CLP is on emergency mode or not.
+
+ // Suggestion done by setting the general state as emergency or not.
+ char isEmergencyOn = '0';
+ if(state==EMERGENCY_MODE)
+ isEmergencyOn = '1';
- // code here ...
+ char cmmde[5];
+ memset(cmmde,'\0',sizeof(cmmde));
+ cmmde[0] = '{';
+ cmmde[1] = 'E';
+ cmmde[2] = isEmergencyOn;
+ cmmde[3] = '}';
+
+ connection.send(cmmde,sizeof(cmmde));
+
break;
}
@@ -211,8 +242,39 @@
// -- MAIN --
void Autoline::run() {
- // Put the main code in here
+ // General state machine
+ switch(state){
+
+ case MAINTENANCE_MODE:{
+ // code here ...
+ }
+
+ case AUTOMATIC_MODE: {
+ // code here ...
+
+ // Put all the station's code in here...
+ //input_elevator();
+ supply_station();
+ //hipot_wait_station();
+ //hipot_station();
+ //pf_station();
+ //ate_wait_station();
+ //ate1_station();
+ //ate2_station();
+ //eprom_station();
+ //remove_station();
+ //output_elevator();
+ }
+
+ case EMERGENCY_MODE: {
+ // code here ...
+ }
+
+ case PAUSED_MODE: {
+ // code here ...
+ }
+ }
supply_station();
// Put all the stations code in here
--- a/Autoline/Autoline.h Sun Sep 16 16:36:04 2018 +0000
+++ b/Autoline/Autoline.h Sun Sep 16 17:28:48 2018 +0000
@@ -60,10 +60,12 @@
std::string read_ios_in_range(int start, int end);
+ // General functions
+ void set_state(short int newState);
+
// CMMD's functions
void read_sensors();
-
// Stations
void input_elevator();
void supply_station();
@@ -76,7 +78,8 @@
void eprom_station();
void remove_station();
void output_elevator();
-
+
+ Mutex _mutex;
};