working code of cdms with i2c

Dependencies:   mbed-rtos mbed

Fork of rtos_basic by mbed official

Committer:
viswa_chaitanya
Date:
Thu Sep 18 10:32:43 2014 +0000
Revision:
7:6b1a6941ac87
Parent:
3:c92e21f305d8
working code of cdms with i2c

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emilmont 1:491820ee784d 1 #include "mbed.h"
emilmont 1:491820ee784d 2 #include "rtos.h"
viswa_chaitanya 7:6b1a6941ac87 3 #include "master.h"
viswa_chaitanya 7:6b1a6941ac87 4
viswa_chaitanya 7:6b1a6941ac87 5 //#include "tmtc.h"
viswa_chaitanya 7:6b1a6941ac87 6 //#include "science.h"
viswa_chaitanya 7:6b1a6941ac87 7 //#include "hk.h"
emilmont 1:491820ee784d 8
viswa_chaitanya 7:6b1a6941ac87 9 #define intmax 11999
viswa_chaitanya 7:6b1a6941ac87 10
viswa_chaitanya 7:6b1a6941ac87 11 Thread* t_tmtc;
viswa_chaitanya 7:6b1a6941ac87 12 Thread* t_science_store_sd;
viswa_chaitanya 7:6b1a6941ac87 13 Thread* t_hk_store_sd;
viswa_chaitanya 7:6b1a6941ac87 14
viswa_chaitanya 7:6b1a6941ac87 15 void t_tmtc_main(void const *args);
viswa_chaitanya 7:6b1a6941ac87 16 void t_science_main(void const *args);
viswa_chaitanya 7:6b1a6941ac87 17 void t_hk_main(void const *args);
viswa_chaitanya 7:6b1a6941ac87 18 void scheduler(void const * args);
viswa_chaitanya 7:6b1a6941ac87 19
viswa_chaitanya 7:6b1a6941ac87 20 Timer timer_main;
viswa_chaitanya 7:6b1a6941ac87 21 int schedcount = 1;
viswa_chaitanya 7:6b1a6941ac87 22 Mutex critical;
emilmont 1:491820ee784d 23
viswa_chaitanya 7:6b1a6941ac87 24 int main() {
viswa_chaitanya 7:6b1a6941ac87 25 Thread thread_tmtc(t_tmtc_main, NULL, osPriorityIdle);
viswa_chaitanya 7:6b1a6941ac87 26 t_tmtc = &thread_tmtc;
viswa_chaitanya 7:6b1a6941ac87 27 Thread thread_science(t_science_main, NULL, osPriorityLow);
viswa_chaitanya 7:6b1a6941ac87 28 t_science_store_sd = &thread_science;
viswa_chaitanya 7:6b1a6941ac87 29 Thread thread_hk(t_hk_main, NULL, osPriorityBelowNormal);
viswa_chaitanya 7:6b1a6941ac87 30 t_hk_store_sd = &thread_hk;
viswa_chaitanya 7:6b1a6941ac87 31
viswa_chaitanya 7:6b1a6941ac87 32 RtosTimer schedule(scheduler,osTimerPeriodic);
viswa_chaitanya 7:6b1a6941ac87 33 timer_main.start();
viswa_chaitanya 7:6b1a6941ac87 34 schedule.start(5000);
viswa_chaitanya 7:6b1a6941ac87 35 Thread::wait(osWaitForever);
viswa_chaitanya 7:6b1a6941ac87 36 }
viswa_chaitanya 7:6b1a6941ac87 37
viswa_chaitanya 7:6b1a6941ac87 38 void scheduler(void const * args)
viswa_chaitanya 7:6b1a6941ac87 39 {
viswa_chaitanya 7:6b1a6941ac87 40 if(schedcount == intmax+1) //the value is reset at this value so as to ensure smooth flow, 65532 and 0 are divisible by 3 and 2.
viswa_chaitanya 7:6b1a6941ac87 41 {
viswa_chaitanya 7:6b1a6941ac87 42 schedcount =0;
viswa_chaitanya 7:6b1a6941ac87 43 }
viswa_chaitanya 7:6b1a6941ac87 44
viswa_chaitanya 7:6b1a6941ac87 45 if(schedcount%4==0)
viswa_chaitanya 7:6b1a6941ac87 46 {
viswa_chaitanya 7:6b1a6941ac87 47 printf("\nHK signal at %f\n",timer_main.read());
viswa_chaitanya 7:6b1a6941ac87 48 t_hk_store_sd->signal_set(0x01);
viswa_chaitanya 7:6b1a6941ac87 49 }
viswa_chaitanya 7:6b1a6941ac87 50
viswa_chaitanya 7:6b1a6941ac87 51 if(schedcount%3==0)
viswa_chaitanya 7:6b1a6941ac87 52 {
viswa_chaitanya 7:6b1a6941ac87 53 printf("\nScience signal at %f\n",timer_main.read());
viswa_chaitanya 7:6b1a6941ac87 54 t_science_store_sd->signal_set(0x01);
viswa_chaitanya 7:6b1a6941ac87 55 }
viswa_chaitanya 7:6b1a6941ac87 56
viswa_chaitanya 7:6b1a6941ac87 57 if(schedcount==5)
viswa_chaitanya 7:6b1a6941ac87 58 {
viswa_chaitanya 7:6b1a6941ac87 59 printf("\nTMTC signalled");
viswa_chaitanya 7:6b1a6941ac87 60 t_tmtc->signal_set(0x1);
viswa_chaitanya 7:6b1a6941ac87 61 }
viswa_chaitanya 7:6b1a6941ac87 62
viswa_chaitanya 7:6b1a6941ac87 63 schedcount++;
viswa_chaitanya 7:6b1a6941ac87 64 }
viswa_chaitanya 7:6b1a6941ac87 65
viswa_chaitanya 7:6b1a6941ac87 66 void t_science_main(void const *args) {
emilmont 1:491820ee784d 67 while (true) {
viswa_chaitanya 7:6b1a6941ac87 68 Thread::signal_wait(0x1);
viswa_chaitanya 7:6b1a6941ac87 69 critical.lock();
viswa_chaitanya 7:6b1a6941ac87 70 printf("science data aquisition started\n");
viswa_chaitanya 7:6b1a6941ac87 71 wait(3);
viswa_chaitanya 7:6b1a6941ac87 72 printf("science data acquisition ended\n");
viswa_chaitanya 7:6b1a6941ac87 73 t_hk_store_sd->signal_set(0x10);
viswa_chaitanya 7:6b1a6941ac87 74 critical.unlock();
viswa_chaitanya 7:6b1a6941ac87 75 wait(3);
viswa_chaitanya 7:6b1a6941ac87 76 printf("Science data written to SD card\n");
emilmont 1:491820ee784d 77 }
emilmont 1:491820ee784d 78 }
viswa_chaitanya 7:6b1a6941ac87 79
viswa_chaitanya 7:6b1a6941ac87 80 void t_hk_main(void const *args) {
emilmont 1:491820ee784d 81 while (true) {
viswa_chaitanya 7:6b1a6941ac87 82 Thread::signal_wait(0x1);
viswa_chaitanya 7:6b1a6941ac87 83 critical.lock();
viswa_chaitanya 7:6b1a6941ac87 84 printf("HK acquisition started\n");
viswa_chaitanya 7:6b1a6941ac87 85 FUNC_I2C_MASTER_MAIN('1',0x20,24 );
viswa_chaitanya 7:6b1a6941ac87 86 wait(2);
viswa_chaitanya 7:6b1a6941ac87 87 printf("HK acquisition ended\n");
viswa_chaitanya 7:6b1a6941ac87 88 critical.unlock();
viswa_chaitanya 7:6b1a6941ac87 89 wait(2);
viswa_chaitanya 7:6b1a6941ac87 90 printf("HK data written to SD card");
emilmont 1:491820ee784d 91 }
emilmont 1:491820ee784d 92 }
viswa_chaitanya 7:6b1a6941ac87 93
viswa_chaitanya 7:6b1a6941ac87 94 void t_tmtc_main(void const *args) {
viswa_chaitanya 7:6b1a6941ac87 95 Thread::signal_wait(0x1);
viswa_chaitanya 7:6b1a6941ac87 96 critical.lock();
viswa_chaitanya 7:6b1a6941ac87 97 printf("tmtc started\n");
viswa_chaitanya 7:6b1a6941ac87 98 wait(5);
viswa_chaitanya 7:6b1a6941ac87 99 printf("tmtc ended\n");
viswa_chaitanya 7:6b1a6941ac87 100 critical.unlock();
viswa_chaitanya 7:6b1a6941ac87 101 wait(5);
viswa_chaitanya 7:6b1a6941ac87 102 printf("tmtc executed\n");
viswa_chaitanya 7:6b1a6941ac87 103 }