Lets you control your mbed from an easy to use GUI. Entire project is on git hub: https://github.com/navin-bhaskar/Controller For usage info follow this link http://navinbhaskar.blogspot.in/2013/02/arduino-controller-3.html

Dependencies:   mbed

Committer:
Navin
Date:
Tue Feb 26 03:45:52 2013 +0000
Revision:
0:fe5850ccdb6f
Child:
1:9d3340bcd863
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Navin 0:fe5850ccdb6f 1 /*
Navin 0:fe5850ccdb6f 2 * This program is free software; you can redistribute it and/or modify
Navin 0:fe5850ccdb6f 3 * it under the terms of the GNU General Public License as published by
Navin 0:fe5850ccdb6f 4 * the Free Software Foundation; either version 2 of the License, or
Navin 0:fe5850ccdb6f 5 * (at your option) any later version.
Navin 0:fe5850ccdb6f 6 *
Navin 0:fe5850ccdb6f 7 * This program is distributed in the hope that it will be useful,
Navin 0:fe5850ccdb6f 8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Navin 0:fe5850ccdb6f 9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Navin 0:fe5850ccdb6f 10 * GNU General Public License for more details.
Navin 0:fe5850ccdb6f 11 *
Navin 0:fe5850ccdb6f 12 * You should have received a copy of the GNU General Public License
Navin 0:fe5850ccdb6f 13 * along with this program; if not, write to the Free Software
Navin 0:fe5850ccdb6f 14 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
Navin 0:fe5850ccdb6f 15 * MA 02110-1301, USA.
Navin 0:fe5850ccdb6f 16 *
Navin 0:fe5850ccdb6f 17 */
Navin 0:fe5850ccdb6f 18
Navin 0:fe5850ccdb6f 19
Navin 0:fe5850ccdb6f 20
Navin 0:fe5850ccdb6f 21 /**
Navin 0:fe5850ccdb6f 22 * \file Trans_layer.cpp
Navin 0:fe5850ccdb6f 23 * \brief Implements a simple protocol for communication with PC
Navin 0:fe5850ccdb6f 24 * \author Navin Bhaskar
Navin 0:fe5850ccdb6f 25 */
Navin 0:fe5850ccdb6f 26
Navin 0:fe5850ccdb6f 27 #include "TransLayer.h"
Navin 0:fe5850ccdb6f 28
Navin 0:fe5850ccdb6f 29
Navin 0:fe5850ccdb6f 30
Navin 0:fe5850ccdb6f 31 /**
Navin 0:fe5850ccdb6f 32 * \fn TransLayer()
Navin 0:fe5850ccdb6f 33 * \brief constructor for trans layer. Initializes the pointers
Navin 0:fe5850ccdb6f 34 * \param none
Navin 0:fe5850ccdb6f 35 * \return none
Navin 0:fe5850ccdb6f 36 */
Navin 0:fe5850ccdb6f 37
Navin 0:fe5850ccdb6f 38 TransLayer::TransLayer()
Navin 0:fe5850ccdb6f 39 {
Navin 0:fe5850ccdb6f 40 _head =_tail = NULL;
Navin 0:fe5850ccdb6f 41 }
Navin 0:fe5850ccdb6f 42
Navin 0:fe5850ccdb6f 43 /**
Navin 0:fe5850ccdb6f 44 * \fn AddService(call_back_ptr cb, char flag)
Navin 0:fe5850ccdb6f 45 * \brief Adds a service to the layer. The arguments are passed to
Navin 0:fe5850ccdb6f 46 * the call back function
Navin 0:fe5850ccdb6f 47 * \param[in] cb call back pointer
Navin 0:fe5850ccdb6f 48 * \param[in] flag flag to which this packet must respond
Navin 0:fe5850ccdb6f 49 * \return -1 on error
Navin 0:fe5850ccdb6f 50 */
Navin 0:fe5850ccdb6f 51
Navin 0:fe5850ccdb6f 52 int TransLayer::AddService(call_back_ptr cb, char flag)
Navin 0:fe5850ccdb6f 53 {
Navin 0:fe5850ccdb6f 54 service_ptr temp=_head, mid;
Navin 0:fe5850ccdb6f 55
Navin 0:fe5850ccdb6f 56 if (NULL == cb) {
Navin 0:fe5850ccdb6f 57 return -1;
Navin 0:fe5850ccdb6f 58 }
Navin 0:fe5850ccdb6f 59
Navin 0:fe5850ccdb6f 60 // we are going to maintain a linked list of services
Navin 0:fe5850ccdb6f 61 mid = (service_ptr)malloc(sizeof(service_list));
Navin 0:fe5850ccdb6f 62
Navin 0:fe5850ccdb6f 63 if (NULL == mid) {
Navin 0:fe5850ccdb6f 64 return -1;
Navin 0:fe5850ccdb6f 65 }
Navin 0:fe5850ccdb6f 66
Navin 0:fe5850ccdb6f 67 // record entries
Navin 0:fe5850ccdb6f 68 mid->service_function = cb;
Navin 0:fe5850ccdb6f 69 mid->service_flag = flag;
Navin 0:fe5850ccdb6f 70 if (NULL == _head) {
Navin 0:fe5850ccdb6f 71 // first entry ever
Navin 0:fe5850ccdb6f 72 _head = mid;
Navin 0:fe5850ccdb6f 73 mid->next_service = NULL;
Navin 0:fe5850ccdb6f 74 } else {
Navin 0:fe5850ccdb6f 75 // traverese to end of the list for insertion
Navin 0:fe5850ccdb6f 76 while (temp->next_service != NULL) {
Navin 0:fe5850ccdb6f 77 temp = temp->next_service;
Navin 0:fe5850ccdb6f 78 }
Navin 0:fe5850ccdb6f 79 temp->next_service = mid;
Navin 0:fe5850ccdb6f 80 mid->next_service = NULL;
Navin 0:fe5850ccdb6f 81 }
Navin 0:fe5850ccdb6f 82 return 0;
Navin 0:fe5850ccdb6f 83 }
Navin 0:fe5850ccdb6f 84
Navin 0:fe5850ccdb6f 85
Navin 0:fe5850ccdb6f 86
Navin 0:fe5850ccdb6f 87 /**
Navin 0:fe5850ccdb6f 88 * \fn LookForService(char flag)
Navin 0:fe5850ccdb6f 89 * \brief This function looks for a service that services given flag
Navin 0:fe5850ccdb6f 90 * \param[in] flag flag of the service
Navin 0:fe5850ccdb6f 91 * \return service ptr containing that has info on service or NULL if service flag
Navin 0:fe5850ccdb6f 92 * was not found
Navin 0:fe5850ccdb6f 93 */
Navin 0:fe5850ccdb6f 94
Navin 0:fe5850ccdb6f 95 service_ptr TransLayer::LookForService(char flag)
Navin 0:fe5850ccdb6f 96 {
Navin 0:fe5850ccdb6f 97 service_ptr temp = _head;
Navin 0:fe5850ccdb6f 98
Navin 0:fe5850ccdb6f 99 while(temp != NULL) {
Navin 0:fe5850ccdb6f 100 if(temp->service_flag == flag) {
Navin 0:fe5850ccdb6f 101 return temp;
Navin 0:fe5850ccdb6f 102 }
Navin 0:fe5850ccdb6f 103 temp = temp->next_service;
Navin 0:fe5850ccdb6f 104 }
Navin 0:fe5850ccdb6f 105
Navin 0:fe5850ccdb6f 106 return NULL;
Navin 0:fe5850ccdb6f 107 }
Navin 0:fe5850ccdb6f 108
Navin 0:fe5850ccdb6f 109
Navin 0:fe5850ccdb6f 110 /**
Navin 0:fe5850ccdb6f 111 * \fn MainLoop(void)
Navin 0:fe5850ccdb6f 112 * \brief This function waits for a flag and then calls appropraite service
Navin 0:fe5850ccdb6f 113 * \param none
Navin 0:fe5850ccdb6f 114 * \return none
Navin 0:fe5850ccdb6f 115 * \note This function never returns has a while(1) at its heart
Navin 0:fe5850ccdb6f 116 */
Navin 0:fe5850ccdb6f 117
Navin 0:fe5850ccdb6f 118 void TransLayer::MainLoop(Console * cons, PerAccess * per)
Navin 0:fe5850ccdb6f 119 {
Navin 0:fe5850ccdb6f 120 char temp, cmd=0;
Navin 0:fe5850ccdb6f 121 char data_buff[20];
Navin 0:fe5850ccdb6f 122 bool start_flag = false, data_start_flag=false, packet_formed = false;
Navin 0:fe5850ccdb6f 123 int i =0;
Navin 0:fe5850ccdb6f 124
Navin 0:fe5850ccdb6f 125
Navin 0:fe5850ccdb6f 126 while(1) {
Navin 0:fe5850ccdb6f 127 if(cons->available() > 0) {
Navin 0:fe5850ccdb6f 128 temp = cons->getCh();
Navin 0:fe5850ccdb6f 129 if(PACKET_START == temp && data_start_flag == false) {
Navin 0:fe5850ccdb6f 130 // start of packet, siganl the starting of packet
Navin 0:fe5850ccdb6f 131 start_flag = true;
Navin 0:fe5850ccdb6f 132 i=0;
Navin 0:fe5850ccdb6f 133 } else if (start_flag == true) {
Navin 0:fe5850ccdb6f 134 cmd = temp; // this the flag that is going to indicate the service
Navin 0:fe5850ccdb6f 135 start_flag = false;
Navin 0:fe5850ccdb6f 136 data_start_flag = true;
Navin 0:fe5850ccdb6f 137 } else if(data_start_flag == true) {
Navin 0:fe5850ccdb6f 138
Navin 0:fe5850ccdb6f 139 if(temp != 0x0d || temp != 0x0a || temp != '\n') {
Navin 0:fe5850ccdb6f 140 data_buff[i] = temp;
Navin 0:fe5850ccdb6f 141 i++;
Navin 0:fe5850ccdb6f 142 }
Navin 0:fe5850ccdb6f 143 if(temp == 0x0d || temp == 0x0a) {
Navin 0:fe5850ccdb6f 144 data_buff[i] = '\0';
Navin 0:fe5850ccdb6f 145 packet_formed = true;
Navin 0:fe5850ccdb6f 146 data_start_flag = false;
Navin 0:fe5850ccdb6f 147 }
Navin 0:fe5850ccdb6f 148
Navin 0:fe5850ccdb6f 149 }
Navin 0:fe5850ccdb6f 150 if(packet_formed == true) {
Navin 0:fe5850ccdb6f 151 service_ptr ser;
Navin 0:fe5850ccdb6f 152 //SeeServices();
Navin 0:fe5850ccdb6f 153 ser = LookForService(cmd);
Navin 0:fe5850ccdb6f 154 if(ser != NULL) {
Navin 0:fe5850ccdb6f 155 ser->service_function(cons, per, data_buff, i);
Navin 0:fe5850ccdb6f 156 }
Navin 0:fe5850ccdb6f 157 packet_formed = false;
Navin 0:fe5850ccdb6f 158 }
Navin 0:fe5850ccdb6f 159 }
Navin 0:fe5850ccdb6f 160 }
Navin 0:fe5850ccdb6f 161 }
Navin 0:fe5850ccdb6f 162
Navin 0:fe5850ccdb6f 163
Navin 0:fe5850ccdb6f 164
Navin 0:fe5850ccdb6f 165
Navin 0:fe5850ccdb6f 166