protegemed, aquisição via A/D simples utilizando interrupção do timer

Dependencies:   EthernetInterface NTPClient mbed-rtos mbed

Fork of ptgm_semDMA by Marcelo Rebonatto

Committer:
viniciushl
Date:
Wed Jan 13 18:53:25 2016 +0000
Revision:
1:8129536051df
Parent:
0:fac116e94d44
Alterada captura para aquisi??o simples do A/D utilizando interrup??o do timer;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rebonatto 0:fac116e94d44 1 /*
rebonatto 0:fac116e94d44 2 Original autor: Francisco
rebonatto 0:fac116e94d44 3 Modificacao do uso da rede: rebonatto
rebonatto 0:fac116e94d44 4 */
rebonatto 0:fac116e94d44 5
rebonatto 0:fac116e94d44 6
rebonatto 0:fac116e94d44 7 #include "TelnetServer.h"
rebonatto 0:fac116e94d44 8
rebonatto 0:fac116e94d44 9 #include "Split.h"
rebonatto 0:fac116e94d44 10
rebonatto 0:fac116e94d44 11 #define OPT_WILL 251
rebonatto 0:fac116e94d44 12 #define OPT_WONT 252
rebonatto 0:fac116e94d44 13 #define OPT_DO 253
rebonatto 0:fac116e94d44 14 #define OPT_DONT 254
rebonatto 0:fac116e94d44 15
rebonatto 0:fac116e94d44 16 char* welcome_msg = "Protegemed - welcome to telnet\r\nType 'help' for a list of commands\r\n";
rebonatto 0:fac116e94d44 17 char *command_not_found_msg_get = "Command not found.\r\n\r\n";
rebonatto 0:fac116e94d44 18 char* prompt_msg = "\r\n$ ";
rebonatto 0:fac116e94d44 19 char iac_will_echo[] = {0xFF,0xFB,0x01};
rebonatto 0:fac116e94d44 20 char erase_cmd[] = { 0x1B,0x5B,0x44,0x1B,0x5B,0x4B};
rebonatto 0:fac116e94d44 21
rebonatto 0:fac116e94d44 22 const struct telnet_cmd_handler TelnetServer::cmds[] = {
rebonatto 0:fac116e94d44 23 {"exit",(cmd_function)-1},
rebonatto 0:fac116e94d44 24 {"help",TelnetServer::HelpCommand},
rebonatto 0:fac116e94d44 25 {"reset",TelnetServer::ResetCommand},
rebonatto 0:fac116e94d44 26 {"remove",TelnetServer::RemoveCommand},
rebonatto 0:fac116e94d44 27 {"listparam",TelnetServer::ListParamCommand},
rebonatto 0:fac116e94d44 28 {"getparam",TelnetServer::GetParamCommand},
rebonatto 0:fac116e94d44 29 {"setparam",TelnetServer::SetParamCommand},
rebonatto 0:fac116e94d44 30 {"version",TelnetServer::VersionCommand},
rebonatto 0:fac116e94d44 31 {"update",TelnetServer::UpdateCommand},
rebonatto 0:fac116e94d44 32 {"",(cmd_function)0}
rebonatto 0:fac116e94d44 33 };
rebonatto 0:fac116e94d44 34
rebonatto 0:fac116e94d44 35 void TelnetServer::TelnetServer_Thread(void const* arg)
rebonatto 0:fac116e94d44 36 {
rebonatto 0:fac116e94d44 37 int r=0;
rebonatto 0:fac116e94d44 38 printf("Telnet Thread starting... \r\nCommands up to 100 chars\n");
rebonatto 0:fac116e94d44 39
rebonatto 0:fac116e94d44 40 TCPSocketServer server;
rebonatto 0:fac116e94d44 41
rebonatto 0:fac116e94d44 42 server.bind(23);
rebonatto 0:fac116e94d44 43 server.listen();
rebonatto 0:fac116e94d44 44
rebonatto 0:fac116e94d44 45 while(1)
rebonatto 0:fac116e94d44 46 {
rebonatto 0:fac116e94d44 47 TCPSocketConnection* conn ;
rebonatto 0:fac116e94d44 48 TCPSocketConnection aux;
rebonatto 0:fac116e94d44 49 r = server.accept(aux);
rebonatto 0:fac116e94d44 50 conn = &aux;
rebonatto 0:fac116e94d44 51 printf("Aceitou conexao \n");
rebonatto 0:fac116e94d44 52 if (r != 0){
rebonatto 0:fac116e94d44 53 printf("Error in connection\n");
rebonatto 0:fac116e94d44 54 exit(1);
rebonatto 0:fac116e94d44 55 }
rebonatto 0:fac116e94d44 56
rebonatto 0:fac116e94d44 57 TelnetSession(conn);
rebonatto 0:fac116e94d44 58 printf("Fechou\n");
rebonatto 0:fac116e94d44 59 conn->close();
rebonatto 0:fac116e94d44 60 }
rebonatto 0:fac116e94d44 61 }
rebonatto 0:fac116e94d44 62
rebonatto 0:fac116e94d44 63 void TelnetServer::TelnetSession(TCPSocketConnection *conn)
rebonatto 0:fac116e94d44 64 {
rebonatto 0:fac116e94d44 65 int r, flag;
rebonatto 0:fac116e94d44 66 int buffer_ptr=0;
rebonatto 0:fac116e94d44 67
rebonatto 0:fac116e94d44 68 printf("Connected to %s:%d\n",conn->get_address(),conn->get_port());
rebonatto 0:fac116e94d44 69
rebonatto 0:fac116e94d44 70 conn->send(welcome_msg,strlen(welcome_msg));
rebonatto 0:fac116e94d44 71 conn->send(prompt_msg,strlen(prompt_msg));
rebonatto 0:fac116e94d44 72
rebonatto 0:fac116e94d44 73 conn->set_blocking(true);
rebonatto 0:fac116e94d44 74
rebonatto 0:fac116e94d44 75 while(1)
rebonatto 0:fac116e94d44 76 {
rebonatto 0:fac116e94d44 77 char buf_rec[260];
rebonatto 0:fac116e94d44 78 unsigned char buf[260];
rebonatto 0:fac116e94d44 79 char buffer[260];
rebonatto 0:fac116e94d44 80
rebonatto 0:fac116e94d44 81 //printf("Vai recevber\n");
rebonatto 0:fac116e94d44 82 r = conn->receive(buf_rec, strlen(buf_rec) );
rebonatto 0:fac116e94d44 83
rebonatto 0:fac116e94d44 84 /* need memcpy becouse commands are ready to unsigned char and tcp receive char */
rebonatto 0:fac116e94d44 85 memcpy(buf, buf_rec, r);
rebonatto 0:fac116e94d44 86
rebonatto 0:fac116e94d44 87 //printf("Receive %d\n", r);
rebonatto 0:fac116e94d44 88
rebonatto 0:fac116e94d44 89 if(r == -1)
rebonatto 0:fac116e94d44 90 {
rebonatto 0:fac116e94d44 91 printf("Error %d %s\n", r, buf);
rebonatto 0:fac116e94d44 92 break;
rebonatto 0:fac116e94d44 93 }
rebonatto 0:fac116e94d44 94
rebonatto 0:fac116e94d44 95 if (r > 120){
rebonatto 0:fac116e94d44 96 printf("Max command length = 100 chars\n");
rebonatto 0:fac116e94d44 97 //send
rebonatto 0:fac116e94d44 98 break;
rebonatto 0:fac116e94d44 99 }
rebonatto 0:fac116e94d44 100
rebonatto 0:fac116e94d44 101 //printf("Got Here %d *%s*\n", r, buf);
rebonatto 0:fac116e94d44 102 //printf("\n\nGot Here2 [%s]\n\n", buf_rec);
rebonatto 0:fac116e94d44 103
rebonatto 0:fac116e94d44 104 for(int i=0;i<r;i++)
rebonatto 0:fac116e94d44 105 {
rebonatto 0:fac116e94d44 106 //check if it is a printable or any of the line control chars
rebonatto 0:fac116e94d44 107 if((buf[i]>31 && buf[i] < 128) || buf[i]=='\r' || buf[i]=='\n' || buf[i]=='\t')
rebonatto 0:fac116e94d44 108 {
rebonatto 0:fac116e94d44 109 //append to the buffer
rebonatto 0:fac116e94d44 110 buffer[buffer_ptr] = buf[i];
rebonatto 0:fac116e94d44 111 buffer_ptr++;
rebonatto 0:fac116e94d44 112 }
rebonatto 0:fac116e94d44 113 else if(buf[i] == '\b') //backspace
rebonatto 0:fac116e94d44 114 {
rebonatto 0:fac116e94d44 115 //erases the character from the command buffer
rebonatto 0:fac116e94d44 116 if(buffer_ptr > 0)
rebonatto 0:fac116e94d44 117 {
rebonatto 0:fac116e94d44 118 buffer_ptr--;
rebonatto 0:fac116e94d44 119 }
rebonatto 0:fac116e94d44 120 //resets m variable state (will not cause error on the next block of code
rebonatto 0:fac116e94d44 121
rebonatto 0:fac116e94d44 122 }
rebonatto 0:fac116e94d44 123 else if((int)buf[i] == 255) //IAC - Interpret As Command
rebonatto 0:fac116e94d44 124 {
rebonatto 0:fac116e94d44 125 if((int)buf[i+1] >= 251)
rebonatto 0:fac116e94d44 126 {
rebonatto 0:fac116e94d44 127 option_negotiator(conn,buf[i+1],buf[i+2]);
rebonatto 0:fac116e94d44 128 i+=2;
rebonatto 0:fac116e94d44 129 }
rebonatto 0:fac116e94d44 130 else
rebonatto 0:fac116e94d44 131 i+=1;
rebonatto 0:fac116e94d44 132 }
rebonatto 0:fac116e94d44 133 }
rebonatto 0:fac116e94d44 134
rebonatto 0:fac116e94d44 135 //detect a carriage return and line feed sequence. Trigger command processor
rebonatto 0:fac116e94d44 136 if(buffer_ptr >= 2)
rebonatto 0:fac116e94d44 137 {
rebonatto 0:fac116e94d44 138 if(buffer[buffer_ptr-1] == '\n' && buffer[buffer_ptr-2] == '\r')
rebonatto 0:fac116e94d44 139 {
rebonatto 0:fac116e94d44 140 char **command;
rebonatto 0:fac116e94d44 141 int command_count;
rebonatto 0:fac116e94d44 142
rebonatto 0:fac116e94d44 143 buffer[buffer_ptr-2] = '\0';
rebonatto 0:fac116e94d44 144 command_count = split((char*)buffer," ",&command);
rebonatto 0:fac116e94d44 145
rebonatto 0:fac116e94d44 146 printf("Command found: %s\n", command[0]);
rebonatto 0:fac116e94d44 147 flag = 1;
rebonatto 0:fac116e94d44 148 //must find a function in the table and then execute it, passing the command array as an argument
rebonatto 0:fac116e94d44 149 for(int i=0;cmds[i].pfn != 0;i++)
rebonatto 0:fac116e94d44 150 {
rebonatto 0:fac116e94d44 151 if(!strcasecmp(command[0],cmds[i].command_name))
rebonatto 0:fac116e94d44 152 {
rebonatto 0:fac116e94d44 153 if((int)cmds[i].pfn == -1)//exit cmd
rebonatto 0:fac116e94d44 154 {
rebonatto 0:fac116e94d44 155 //delete buffer;
rebonatto 0:fac116e94d44 156 return;
rebonatto 0:fac116e94d44 157 }
rebonatto 0:fac116e94d44 158 else
rebonatto 0:fac116e94d44 159 {
rebonatto 0:fac116e94d44 160 flag = 0;
rebonatto 0:fac116e94d44 161 cmds[i].pfn(conn,command,command_count);
rebonatto 0:fac116e94d44 162 break;
rebonatto 0:fac116e94d44 163 }
rebonatto 0:fac116e94d44 164 }
rebonatto 0:fac116e94d44 165 }
rebonatto 0:fac116e94d44 166
rebonatto 0:fac116e94d44 167 if (flag)
rebonatto 0:fac116e94d44 168 conn->send(command_not_found_msg_get,strlen(command_not_found_msg_get));
rebonatto 0:fac116e94d44 169
rebonatto 0:fac116e94d44 170 //write the prompt
rebonatto 0:fac116e94d44 171 conn->send(prompt_msg,strlen(prompt_msg));
rebonatto 0:fac116e94d44 172 buffer_ptr=0;
rebonatto 0:fac116e94d44 173 }
rebonatto 0:fac116e94d44 174 }
rebonatto 0:fac116e94d44 175 //buf_rec[0] = buf[0] = buffer[0] = '\0';
rebonatto 0:fac116e94d44 176 }
rebonatto 0:fac116e94d44 177
rebonatto 0:fac116e94d44 178 //delete buffer;
rebonatto 0:fac116e94d44 179
rebonatto 0:fac116e94d44 180
rebonatto 0:fac116e94d44 181 }
rebonatto 0:fac116e94d44 182
rebonatto 0:fac116e94d44 183 void TelnetServer::option_negotiator(TCPSocketConnection *conn,unsigned char opt_cmd,unsigned char opt_param)
rebonatto 0:fac116e94d44 184 {
rebonatto 0:fac116e94d44 185 char opt[3]={0,0,0};
rebonatto 0:fac116e94d44 186
rebonatto 0:fac116e94d44 187 if(opt_param == 1 && (opt_cmd == OPT_DO || opt_cmd == OPT_DONT)) //response for our will echo
rebonatto 0:fac116e94d44 188 {
rebonatto 0:fac116e94d44 189 printf("HERE");
rebonatto 0:fac116e94d44 190 return;
rebonatto 0:fac116e94d44 191 }
rebonatto 0:fac116e94d44 192 if(opt_cmd == OPT_DO) //every other option that it will ask to us to do, we won't
rebonatto 0:fac116e94d44 193 {
rebonatto 0:fac116e94d44 194 opt[0] = 255;
rebonatto 0:fac116e94d44 195 opt[1] = OPT_WONT;
rebonatto 0:fac116e94d44 196 opt[2] = opt_param;
rebonatto 0:fac116e94d44 197 conn->send(opt,3);
rebonatto 0:fac116e94d44 198 }
rebonatto 0:fac116e94d44 199 else if(opt_cmd == OPT_WILL && opt_param==3) //OK to supperss go ahead
rebonatto 0:fac116e94d44 200 {
rebonatto 0:fac116e94d44 201 opt[0] = 255;
rebonatto 0:fac116e94d44 202 opt[1] = OPT_DO;
rebonatto 0:fac116e94d44 203 opt[2] = opt_param;
rebonatto 0:fac116e94d44 204 conn->send(opt,3);
rebonatto 0:fac116e94d44 205 }
rebonatto 0:fac116e94d44 206 else if(opt_cmd == OPT_WILL) //every other option that it will ask do, we don't
rebonatto 0:fac116e94d44 207 {
rebonatto 0:fac116e94d44 208 opt[0] = 255;
rebonatto 0:fac116e94d44 209 opt[1] = OPT_DONT;
rebonatto 0:fac116e94d44 210 opt[2] = opt_param;
rebonatto 0:fac116e94d44 211 conn->send(opt,3);
rebonatto 0:fac116e94d44 212
rebonatto 0:fac116e94d44 213 }
rebonatto 0:fac116e94d44 214
rebonatto 0:fac116e94d44 215 }
rebonatto 0:fac116e94d44 216