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:51:46 2013 +0000
Revision:
1:9d3340bcd863
Parent:
0:fe5850ccdb6f
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 * \brief Implements a simple protocol for communication with PC
Navin 0:fe5850ccdb6f 23 * \author Navin Bhaskar
Navin 0:fe5850ccdb6f 24 */
Navin 0:fe5850ccdb6f 25
Navin 0:fe5850ccdb6f 26 #include "TransLayer.h"
Navin 0:fe5850ccdb6f 27
Navin 0:fe5850ccdb6f 28
Navin 0:fe5850ccdb6f 29
Navin 0:fe5850ccdb6f 30 /**
Navin 0:fe5850ccdb6f 31 * \fn TransLayer()
Navin 0:fe5850ccdb6f 32 * \brief constructor for trans layer. Initializes the pointers
Navin 0:fe5850ccdb6f 33 * \param none
Navin 0:fe5850ccdb6f 34 * \return none
Navin 0:fe5850ccdb6f 35 */
Navin 0:fe5850ccdb6f 36
Navin 0:fe5850ccdb6f 37 TransLayer::TransLayer()
Navin 0:fe5850ccdb6f 38 {
Navin 0:fe5850ccdb6f 39 _head =_tail = NULL;
Navin 0:fe5850ccdb6f 40 }
Navin 0:fe5850ccdb6f 41
Navin 0:fe5850ccdb6f 42 /**
Navin 0:fe5850ccdb6f 43 * \fn AddService(call_back_ptr cb, char flag)
Navin 0:fe5850ccdb6f 44 * \brief Adds a service to the layer. The arguments are passed to
Navin 0:fe5850ccdb6f 45 * the call back function
Navin 0:fe5850ccdb6f 46 * \param[in] cb call back pointer
Navin 0:fe5850ccdb6f 47 * \param[in] flag flag to which this packet must respond
Navin 0:fe5850ccdb6f 48 * \return -1 on error
Navin 0:fe5850ccdb6f 49 */
Navin 0:fe5850ccdb6f 50
Navin 0:fe5850ccdb6f 51 int TransLayer::AddService(call_back_ptr cb, char flag)
Navin 0:fe5850ccdb6f 52 {
Navin 0:fe5850ccdb6f 53 service_ptr temp=_head, mid;
Navin 0:fe5850ccdb6f 54
Navin 0:fe5850ccdb6f 55 if (NULL == cb) {
Navin 0:fe5850ccdb6f 56 return -1;
Navin 0:fe5850ccdb6f 57 }
Navin 0:fe5850ccdb6f 58
Navin 0:fe5850ccdb6f 59 // we are going to maintain a linked list of services
Navin 0:fe5850ccdb6f 60 mid = (service_ptr)malloc(sizeof(service_list));
Navin 0:fe5850ccdb6f 61
Navin 0:fe5850ccdb6f 62 if (NULL == mid) {
Navin 0:fe5850ccdb6f 63 return -1;
Navin 0:fe5850ccdb6f 64 }
Navin 0:fe5850ccdb6f 65
Navin 0:fe5850ccdb6f 66 // record entries
Navin 0:fe5850ccdb6f 67 mid->service_function = cb;
Navin 0:fe5850ccdb6f 68 mid->service_flag = flag;
Navin 0:fe5850ccdb6f 69 if (NULL == _head) {
Navin 0:fe5850ccdb6f 70 // first entry ever
Navin 0:fe5850ccdb6f 71 _head = mid;
Navin 0:fe5850ccdb6f 72 mid->next_service = NULL;
Navin 0:fe5850ccdb6f 73 } else {
Navin 0:fe5850ccdb6f 74 // traverese to end of the list for insertion
Navin 0:fe5850ccdb6f 75 while (temp->next_service != NULL) {
Navin 0:fe5850ccdb6f 76 temp = temp->next_service;
Navin 0:fe5850ccdb6f 77 }
Navin 0:fe5850ccdb6f 78 temp->next_service = mid;
Navin 0:fe5850ccdb6f 79 mid->next_service = NULL;
Navin 0:fe5850ccdb6f 80 }
Navin 0:fe5850ccdb6f 81 return 0;
Navin 0:fe5850ccdb6f 82 }
Navin 0:fe5850ccdb6f 83
Navin 0:fe5850ccdb6f 84
Navin 0:fe5850ccdb6f 85
Navin 0:fe5850ccdb6f 86 /**
Navin 0:fe5850ccdb6f 87 * \fn LookForService(char flag)
Navin 0:fe5850ccdb6f 88 * \brief This function looks for a service that services given flag
Navin 0:fe5850ccdb6f 89 * \param[in] flag flag of the service
Navin 0:fe5850ccdb6f 90 * \return service ptr containing that has info on service or NULL if service flag
Navin 0:fe5850ccdb6f 91 * was not found
Navin 0:fe5850ccdb6f 92 */
Navin 0:fe5850ccdb6f 93
Navin 0:fe5850ccdb6f 94 service_ptr TransLayer::LookForService(char flag)
Navin 0:fe5850ccdb6f 95 {
Navin 0:fe5850ccdb6f 96 service_ptr temp = _head;
Navin 0:fe5850ccdb6f 97
Navin 0:fe5850ccdb6f 98 while(temp != NULL) {
Navin 0:fe5850ccdb6f 99 if(temp->service_flag == flag) {
Navin 0:fe5850ccdb6f 100 return temp;
Navin 0:fe5850ccdb6f 101 }
Navin 0:fe5850ccdb6f 102 temp = temp->next_service;
Navin 0:fe5850ccdb6f 103 }
Navin 0:fe5850ccdb6f 104
Navin 0:fe5850ccdb6f 105 return NULL;
Navin 0:fe5850ccdb6f 106 }
Navin 0:fe5850ccdb6f 107
Navin 0:fe5850ccdb6f 108
Navin 0:fe5850ccdb6f 109 /**
Navin 0:fe5850ccdb6f 110 * \fn MainLoop(void)
Navin 0:fe5850ccdb6f 111 * \brief This function waits for a flag and then calls appropraite service
Navin 0:fe5850ccdb6f 112 * \param none
Navin 0:fe5850ccdb6f 113 * \return none
Navin 0:fe5850ccdb6f 114 * \note This function never returns has a while(1) at its heart
Navin 0:fe5850ccdb6f 115 */
Navin 0:fe5850ccdb6f 116
Navin 0:fe5850ccdb6f 117 void TransLayer::MainLoop(Console * cons, PerAccess * per)
Navin 0:fe5850ccdb6f 118 {
Navin 0:fe5850ccdb6f 119 char temp, cmd=0;
Navin 0:fe5850ccdb6f 120 char data_buff[20];
Navin 0:fe5850ccdb6f 121 bool start_flag = false, data_start_flag=false, packet_formed = false;
Navin 0:fe5850ccdb6f 122 int i =0;
Navin 0:fe5850ccdb6f 123
Navin 0:fe5850ccdb6f 124
Navin 0:fe5850ccdb6f 125 while(1) {
Navin 0:fe5850ccdb6f 126 if(cons->available() > 0) {
Navin 0:fe5850ccdb6f 127 temp = cons->getCh();
Navin 0:fe5850ccdb6f 128 if(PACKET_START == temp && data_start_flag == false) {
Navin 0:fe5850ccdb6f 129 // start of packet, siganl the starting of packet
Navin 0:fe5850ccdb6f 130 start_flag = true;
Navin 0:fe5850ccdb6f 131 i=0;
Navin 0:fe5850ccdb6f 132 } else if (start_flag == true) {
Navin 0:fe5850ccdb6f 133 cmd = temp; // this the flag that is going to indicate the service
Navin 0:fe5850ccdb6f 134 start_flag = false;
Navin 0:fe5850ccdb6f 135 data_start_flag = true;
Navin 0:fe5850ccdb6f 136 } else if(data_start_flag == true) {
Navin 0:fe5850ccdb6f 137
Navin 0:fe5850ccdb6f 138 if(temp != 0x0d || temp != 0x0a || temp != '\n') {
Navin 0:fe5850ccdb6f 139 data_buff[i] = temp;
Navin 0:fe5850ccdb6f 140 i++;
Navin 0:fe5850ccdb6f 141 }
Navin 0:fe5850ccdb6f 142 if(temp == 0x0d || temp == 0x0a) {
Navin 0:fe5850ccdb6f 143 data_buff[i] = '\0';
Navin 0:fe5850ccdb6f 144 packet_formed = true;
Navin 0:fe5850ccdb6f 145 data_start_flag = false;
Navin 0:fe5850ccdb6f 146 }
Navin 0:fe5850ccdb6f 147
Navin 0:fe5850ccdb6f 148 }
Navin 0:fe5850ccdb6f 149 if(packet_formed == true) {
Navin 0:fe5850ccdb6f 150 service_ptr ser;
Navin 0:fe5850ccdb6f 151 //SeeServices();
Navin 0:fe5850ccdb6f 152 ser = LookForService(cmd);
Navin 0:fe5850ccdb6f 153 if(ser != NULL) {
Navin 0:fe5850ccdb6f 154 ser->service_function(cons, per, data_buff, i);
Navin 0:fe5850ccdb6f 155 }
Navin 0:fe5850ccdb6f 156 packet_formed = false;
Navin 0:fe5850ccdb6f 157 }
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