led example with 2 timers

Dependencies:   mbed mbed-rtos

Committer:
passelin
Date:
Tue Feb 11 06:37:34 2014 +0000
Revision:
3:204e23521e39
Parent:
2:124a066878cc
Child:
4:af325c921e79
01:37;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
passelin 1:6e31c704f4d6 1 #include "main.h"
passelin 1:6e31c704f4d6 2
passelin 1:6e31c704f4d6 3 extern Serial pc;
passelin 2:124a066878cc 4 extern Queue<int, 16> ReaderQueue;
passelin 2:124a066878cc 5 extern Mail<message_t, 16> mailBox;
passelin 1:6e31c704f4d6 6
passelin 2:124a066878cc 7 void Modulator_init()
passelin 1:6e31c704f4d6 8 {
passelin 2:124a066878cc 9
passelin 1:6e31c704f4d6 10 }
passelin 1:6e31c704f4d6 11
passelin 2:124a066878cc 12 void buildTrame(string msg)
passelin 1:6e31c704f4d6 13 {
passelin 2:124a066878cc 14 string temp = "";
passelin 2:124a066878cc 15 string msgTemp = "";
passelin 2:124a066878cc 16
passelin 2:124a066878cc 17 //Append preamble
passelin 2:124a066878cc 18 temp += bitset<8>(PREAMBLE).to_string<char,string::traits_type,string::allocator_type>();
passelin 2:124a066878cc 19
passelin 2:124a066878cc 20 //Append Start bit
passelin 2:124a066878cc 21 temp += bitset<8>(START).to_string<char,string::traits_type,string::allocator_type>();
passelin 2:124a066878cc 22
passelin 2:124a066878cc 23 //Append Type
passelin 2:124a066878cc 24 temp += bitset<8>(TYPE).to_string<char,string::traits_type,string::allocator_type>();
passelin 2:124a066878cc 25
passelin 2:124a066878cc 26 //Append Length
passelin 2:124a066878cc 27 temp += bitset<8>(msg.size()*8).to_string<char,string::traits_type,string::allocator_type>();
passelin 2:124a066878cc 28
passelin 2:124a066878cc 29 for (std::size_t i = 0; i < msg.size(); i++)
passelin 1:6e31c704f4d6 30 {
passelin 2:124a066878cc 31 msgTemp += bitset<8>(msg.c_str()[i]).to_string<char,string::traits_type,string::allocator_type>();
passelin 1:6e31c704f4d6 32 }
passelin 2:124a066878cc 33
passelin 2:124a066878cc 34 temp += msgTemp;
passelin 2:124a066878cc 35
passelin 2:124a066878cc 36 //Append CRC
passelin 2:124a066878cc 37 char *a = (char*)msgTemp.c_str();
passelin 2:124a066878cc 38 uint16_t crc = calculate_crc16(a, sizeof(a));
passelin 2:124a066878cc 39
passelin 2:124a066878cc 40 temp += bitset<16>(crc).to_string<char,string::traits_type,string::allocator_type>();
passelin 2:124a066878cc 41
passelin 2:124a066878cc 42 //Append Stop bit
passelin 2:124a066878cc 43 temp += bitset<8>(STOP).to_string<char,string::traits_type,string::allocator_type>();
passelin 2:124a066878cc 44
passelin 2:124a066878cc 45 //Put the completed trame in the mail box
passelin 3:204e23521e39 46 message_t *mbTrame = mailBox.alloc();
passelin 2:124a066878cc 47 mbTrame->trame = temp;
passelin 3:204e23521e39 48 mbTrame->size = msgTemp.size();
passelin 3:204e23521e39 49 mailBox.put(mbTrame);
passelin 2:124a066878cc 50
passelin 3:204e23521e39 51 //pc.printf( mbTrame->trame.c_str());
passelin 1:6e31c704f4d6 52 }
passelin 1:6e31c704f4d6 53
passelin 1:6e31c704f4d6 54 void Modulator_thread(void const *args)
passelin 1:6e31c704f4d6 55 {
passelin 2:124a066878cc 56 string *queueItem;
passelin 2:124a066878cc 57 osEvent evt;
passelin 2:124a066878cc 58
passelin 1:6e31c704f4d6 59 Modulator_init();
passelin 1:6e31c704f4d6 60
passelin 1:6e31c704f4d6 61 while(1)
passelin 1:6e31c704f4d6 62 {
passelin 2:124a066878cc 63 evt = ReaderQueue.get();
passelin 2:124a066878cc 64 if (evt.status == osEventMessage)
passelin 2:124a066878cc 65 {
passelin 2:124a066878cc 66 queueItem = (string*)evt.value.p;
passelin 2:124a066878cc 67 buildTrame(*queueItem);
passelin 2:124a066878cc 68 }
passelin 2:124a066878cc 69
passelin 1:6e31c704f4d6 70 }
passelin 2:124a066878cc 71 }
passelin 2:124a066878cc 72 // pc.printf("Test CRC16: %04X\r\n",calculate_crc16(TestString, length));