Novo

Dependencies:   EthernetInterface mbed-rtos mbed sample_handler

Committer:
faverosantos
Date:
Tue Jan 16 19:50:00 2018 +0000
Revision:
0:71e5f03dd7a0
Novo

Who changed what in which revision?

UserRevisionLine numberNew contents of line
faverosantos 0:71e5f03dd7a0 1 #include "mylibs/globais.h"
faverosantos 0:71e5f03dd7a0 2 #include "sample_handler.h"
faverosantos 0:71e5f03dd7a0 3 #include "EthernetInterface.h"
faverosantos 0:71e5f03dd7a0 4 #include "string.h"
faverosantos 0:71e5f03dd7a0 5 #include "rtos.h"
faverosantos 0:71e5f03dd7a0 6 #include "mbed.h"
faverosantos 0:71e5f03dd7a0 7 #include "LPC407x_8x_177x_8x.h"
faverosantos 0:71e5f03dd7a0 8 #include "system_LPC407x_8x_177x_8x.h"
faverosantos 0:71e5f03dd7a0 9 #include <iostream>
faverosantos 0:71e5f03dd7a0 10
faverosantos 0:71e5f03dd7a0 11 typedef struct ethernet_handler_s{
faverosantos 0:71e5f03dd7a0 12 int n_written;
faverosantos 0:71e5f03dd7a0 13 } my_ethernet_handler_t;
faverosantos 0:71e5f03dd7a0 14
faverosantos 0:71e5f03dd7a0 15 /* Instanciar objetos */
faverosantos 0:71e5f03dd7a0 16 SampleHandler my_sample_handler(p15);
faverosantos 0:71e5f03dd7a0 17 my_ethernet_handler_t my_ethernet_handler;
faverosantos 0:71e5f03dd7a0 18
faverosantos 0:71e5f03dd7a0 19 DigitalOut led_verde_1(LED1);
faverosantos 0:71e5f03dd7a0 20 DigitalOut led_verde_2(LED2);
faverosantos 0:71e5f03dd7a0 21 DigitalOut my_pin(p8);
faverosantos 0:71e5f03dd7a0 22
faverosantos 0:71e5f03dd7a0 23 Thread adc_thread;
faverosantos 0:71e5f03dd7a0 24 Thread transfer_thread;
faverosantos 0:71e5f03dd7a0 25 EthernetInterface eth;
faverosantos 0:71e5f03dd7a0 26 TCPSocketConnection sock;
faverosantos 0:71e5f03dd7a0 27
faverosantos 0:71e5f03dd7a0 28 Serial serial_debug(USBTX, USBRX);
faverosantos 0:71e5f03dd7a0 29 Ticker ticker_sampler;
faverosantos 0:71e5f03dd7a0 30 Timer benchmark;
faverosantos 0:71e5f03dd7a0 31
faverosantos 0:71e5f03dd7a0 32
faverosantos 0:71e5f03dd7a0 33 /* Funções */
faverosantos 0:71e5f03dd7a0 34 void conf_serial_debug(void);
faverosantos 0:71e5f03dd7a0 35 void conf_ethernet(void);
faverosantos 0:71e5f03dd7a0 36 void conf_thread(void);
faverosantos 0:71e5f03dd7a0 37 void conf_timer(void);
faverosantos 0:71e5f03dd7a0 38
faverosantos 0:71e5f03dd7a0 39 void adc_thread_launch(void);
faverosantos 0:71e5f03dd7a0 40 void sample_int(void);
faverosantos 0:71e5f03dd7a0 41 void transfer_int(void);
faverosantos 0:71e5f03dd7a0 42 void print_readout(void);
faverosantos 0:71e5f03dd7a0 43 void adc_sample_now(void);
faverosantos 0:71e5f03dd7a0 44 void sample_now(void);
faverosantos 0:71e5f03dd7a0 45 void flip(void);
faverosantos 0:71e5f03dd7a0 46
faverosantos 0:71e5f03dd7a0 47 bool sampled = false;
faverosantos 0:71e5f03dd7a0 48
faverosantos 0:71e5f03dd7a0 49 int main() {
faverosantos 0:71e5f03dd7a0 50 my_ethernet_handler.n_written = 9;
faverosantos 0:71e5f03dd7a0 51 conf_serial_debug();
faverosantos 0:71e5f03dd7a0 52 serial_debug.printf("\033[2J"); // Limpa tela, em ANSI
faverosantos 0:71e5f03dd7a0 53 serial_debug.printf("\033[H"); // Cursor para home
faverosantos 0:71e5f03dd7a0 54 serial_debug.printf("\r -- Aloha!! \n");
faverosantos 0:71e5f03dd7a0 55 //conf_ethernet();
faverosantos 0:71e5f03dd7a0 56 //serial_debug.printf("\r -- Ethernet OK!! \n");
faverosantos 0:71e5f03dd7a0 57 //conf_thread();
faverosantos 0:71e5f03dd7a0 58 //serial_debug.printf("\r -- Thread OK!! \n");
faverosantos 0:71e5f03dd7a0 59 conf_timer();
faverosantos 0:71e5f03dd7a0 60 serial_debug.printf("\r -- Timer OK!! \n");
faverosantos 0:71e5f03dd7a0 61
faverosantos 0:71e5f03dd7a0 62
faverosantos 0:71e5f03dd7a0 63
faverosantos 0:71e5f03dd7a0 64 led_verde_1 = 0;
faverosantos 0:71e5f03dd7a0 65 led_verde_2 = 1;
faverosantos 0:71e5f03dd7a0 66 my_pin = 0;
faverosantos 0:71e5f03dd7a0 67
faverosantos 0:71e5f03dd7a0 68 while(1) {
faverosantos 0:71e5f03dd7a0 69 my_pin = !my_pin;
faverosantos 0:71e5f03dd7a0 70
faverosantos 0:71e5f03dd7a0 71 /*if (sampled == true){
faverosantos 0:71e5f03dd7a0 72 sampled = false;
faverosantos 0:71e5f03dd7a0 73 serial_debug.printf("\r -- Frequencia de amostragem (Hz): %f \n", 1/benchmark.read());
faverosantos 0:71e5f03dd7a0 74 benchmark.reset();
faverosantos 0:71e5f03dd7a0 75 my_pin = 1;
faverosantos 0:71e5f03dd7a0 76 }*/
faverosantos 0:71e5f03dd7a0 77 //adc_thread.signal_set(0x1);
faverosantos 0:71e5f03dd7a0 78 /*if (my_ethernet_handler.n_written == -1){
faverosantos 0:71e5f03dd7a0 79 sock.close();
faverosantos 0:71e5f03dd7a0 80 serial_debug.printf("\r -- Socket closed!\n");
faverosantos 0:71e5f03dd7a0 81
faverosantos 0:71e5f03dd7a0 82 eth.disconnect();
faverosantos 0:71e5f03dd7a0 83 serial_debug.printf("\r -- Ethernet disconnected!\n");
faverosantos 0:71e5f03dd7a0 84 break;
faverosantos 0:71e5f03dd7a0 85 }*/
faverosantos 0:71e5f03dd7a0 86 }
faverosantos 0:71e5f03dd7a0 87 //serial_debug.printf("\r -- Programa em loop infinito!\n");
faverosantos 0:71e5f03dd7a0 88 //while(1){}
faverosantos 0:71e5f03dd7a0 89 }
faverosantos 0:71e5f03dd7a0 90
faverosantos 0:71e5f03dd7a0 91 void print_readout(void){
faverosantos 0:71e5f03dd7a0 92 serial_debug.printf("\r -- Valor de sample: %f \n", my_sample_handler.one_sample_readout);
faverosantos 0:71e5f03dd7a0 93 }
faverosantos 0:71e5f03dd7a0 94
faverosantos 0:71e5f03dd7a0 95 void sample_int(void){
faverosantos 0:71e5f03dd7a0 96 static uint16_t static_local_counter = 0;
faverosantos 0:71e5f03dd7a0 97 while(1){
faverosantos 0:71e5f03dd7a0 98 //benchmark.start();
faverosantos 0:71e5f03dd7a0 99 //Thread::wait(1);
faverosantos 0:71e5f03dd7a0 100 Thread::signal_wait(0x1);
faverosantos 0:71e5f03dd7a0 101 my_sample_handler.get_sample();
faverosantos 0:71e5f03dd7a0 102
faverosantos 0:71e5f03dd7a0 103 //Thread::signal_wait(0x1);
faverosantos 0:71e5f03dd7a0 104
faverosantos 0:71e5f03dd7a0 105
faverosantos 0:71e5f03dd7a0 106 /*my_sample_handler.sampling_buffer[static_local_counter] = my_sample_handler.one_sample_readout;
faverosantos 0:71e5f03dd7a0 107 //print_readout();
faverosantos 0:71e5f03dd7a0 108 //serial_debug.printf("\r -- Posicao do buffer: %d \n", static_local_counter);
faverosantos 0:71e5f03dd7a0 109 static_local_counter = static_local_counter + 1;
faverosantos 0:71e5f03dd7a0 110
faverosantos 0:71e5f03dd7a0 111 if (static_local_counter == BUFFER_SIZE){
faverosantos 0:71e5f03dd7a0 112 static_local_counter = 0;
faverosantos 0:71e5f03dd7a0 113 my_sample_handler.is_buffer_filled = true; // aqui era true
faverosantos 0:71e5f03dd7a0 114 transfer_thread.signal_set(0x1);
faverosantos 0:71e5f03dd7a0 115 //serial_debug.printf("\r -- ADC_THREAD_SIGNAL: 1 \n");
faverosantos 0:71e5f03dd7a0 116 }*/
faverosantos 0:71e5f03dd7a0 117 //benchmark.stop();
faverosantos 0:71e5f03dd7a0 118 //serial_debug.printf("\r -- Frequencia de amostragem (Hz): %f \n", 1/benchmark.read());
faverosantos 0:71e5f03dd7a0 119 //benchmark.reset();
faverosantos 0:71e5f03dd7a0 120 }
faverosantos 0:71e5f03dd7a0 121 }
faverosantos 0:71e5f03dd7a0 122
faverosantos 0:71e5f03dd7a0 123 void transfer_int(void){
faverosantos 0:71e5f03dd7a0 124 uint16_t x;
faverosantos 0:71e5f03dd7a0 125 std::string str;
faverosantos 0:71e5f03dd7a0 126 char * gigante = (char *)calloc(BUFFER_SIZE * 8, sizeof(char)); //BUFFER_SIZE * 32, sizeof(char)
faverosantos 0:71e5f03dd7a0 127 char tmp[8];
faverosantos 0:71e5f03dd7a0 128
faverosantos 0:71e5f03dd7a0 129 while(1) {
faverosantos 0:71e5f03dd7a0 130 Thread::signal_wait(0x1);
faverosantos 0:71e5f03dd7a0 131 led_verde_1 = !led_verde_1;
faverosantos 0:71e5f03dd7a0 132 if (my_sample_handler.is_buffer_filled == true){
faverosantos 0:71e5f03dd7a0 133 my_sample_handler.is_buffer_filled = false;
faverosantos 0:71e5f03dd7a0 134
faverosantos 0:71e5f03dd7a0 135 str += "i\t";
faverosantos 0:71e5f03dd7a0 136 for (x = 0; x < BUFFER_SIZE; x++) {
faverosantos 0:71e5f03dd7a0 137 if (my_sample_handler.sampling_buffer[x] < 0)
faverosantos 0:71e5f03dd7a0 138 {
faverosantos 0:71e5f03dd7a0 139 my_sample_handler.sampling_buffer[x] = 0;
faverosantos 0:71e5f03dd7a0 140 }
faverosantos 0:71e5f03dd7a0 141 //memset(tmp, 0, sizeof(tmp));
faverosantos 0:71e5f03dd7a0 142 sprintf(tmp, "%f\t", my_sample_handler.sampling_buffer[x]);
faverosantos 0:71e5f03dd7a0 143 str += tmp;
faverosantos 0:71e5f03dd7a0 144 }
faverosantos 0:71e5f03dd7a0 145 str += "f\n";
faverosantos 0:71e5f03dd7a0 146
faverosantos 0:71e5f03dd7a0 147 std::strcpy(gigante, str.c_str());
faverosantos 0:71e5f03dd7a0 148 my_ethernet_handler.n_written = sock.send_all(gigante, BUFFER_SIZE*9+4);
faverosantos 0:71e5f03dd7a0 149 str.clear();
faverosantos 0:71e5f03dd7a0 150 if(my_ethernet_handler.n_written == -1){
faverosantos 0:71e5f03dd7a0 151
faverosantos 0:71e5f03dd7a0 152 // TODO Não está funcionando esse clean close aqui
faverosantos 0:71e5f03dd7a0 153 transfer_thread.terminate();
faverosantos 0:71e5f03dd7a0 154 serial_debug.printf("\r -- Thread de transferencia terminada!\n");
faverosantos 0:71e5f03dd7a0 155 break;
faverosantos 0:71e5f03dd7a0 156 }
faverosantos 0:71e5f03dd7a0 157 }
faverosantos 0:71e5f03dd7a0 158 }
faverosantos 0:71e5f03dd7a0 159 }
faverosantos 0:71e5f03dd7a0 160
faverosantos 0:71e5f03dd7a0 161 void conf_serial_debug(void){
faverosantos 0:71e5f03dd7a0 162 serial_debug.baud(921600);
faverosantos 0:71e5f03dd7a0 163 }
faverosantos 0:71e5f03dd7a0 164
faverosantos 0:71e5f03dd7a0 165 void conf_thread(void){
faverosantos 0:71e5f03dd7a0 166 adc_thread.start(sample_int);
faverosantos 0:71e5f03dd7a0 167 transfer_thread.start(transfer_int);
faverosantos 0:71e5f03dd7a0 168 }
faverosantos 0:71e5f03dd7a0 169
faverosantos 0:71e5f03dd7a0 170 void adc_thread_launch(void){
faverosantos 0:71e5f03dd7a0 171 adc_thread.signal_set(0x1);
faverosantos 0:71e5f03dd7a0 172 serial_debug.printf("\r -- Tock!!\n");
faverosantos 0:71e5f03dd7a0 173 }
faverosantos 0:71e5f03dd7a0 174
faverosantos 0:71e5f03dd7a0 175 void sample_now(void){
faverosantos 0:71e5f03dd7a0 176 //serial_debug.printf("\r -- Tick!!\n");
faverosantos 0:71e5f03dd7a0 177 my_pin = 0;
faverosantos 0:71e5f03dd7a0 178 sampled = true;
faverosantos 0:71e5f03dd7a0 179 //benchmark.start();
faverosantos 0:71e5f03dd7a0 180 my_sample_handler.get_sample();
faverosantos 0:71e5f03dd7a0 181 //benchmark.stop();
faverosantos 0:71e5f03dd7a0 182 //serial_debug.printf("\r -- Frequencia de amostragem (Hz): %f \n", 1/benchmark.read());
faverosantos 0:71e5f03dd7a0 183 //benchmark.reset();
faverosantos 0:71e5f03dd7a0 184 //my_pin = !1;
faverosantos 0:71e5f03dd7a0 185 }
faverosantos 0:71e5f03dd7a0 186
faverosantos 0:71e5f03dd7a0 187 void flip(void){
faverosantos 0:71e5f03dd7a0 188 led_verde_1 = !led_verde_1;
faverosantos 0:71e5f03dd7a0 189 led_verde_2 = !led_verde_2;
faverosantos 0:71e5f03dd7a0 190 //serial_debug.printf("\r -- Tick!!\n");
faverosantos 0:71e5f03dd7a0 191 }
faverosantos 0:71e5f03dd7a0 192
faverosantos 0:71e5f03dd7a0 193 void conf_timer(void){
faverosantos 0:71e5f03dd7a0 194 /*ticker_sampler.attach_us(&sample_now,100);
faverosantos 0:71e5f03dd7a0 195 serial_debug.printf("\r -- Tock!!\n");*/
faverosantos 0:71e5f03dd7a0 196 }
faverosantos 0:71e5f03dd7a0 197
faverosantos 0:71e5f03dd7a0 198 void conf_ethernet(void){
faverosantos 0:71e5f03dd7a0 199 int16_t is_connected = 9;
faverosantos 0:71e5f03dd7a0 200
faverosantos 0:71e5f03dd7a0 201 /* Ethernet init */
faverosantos 0:71e5f03dd7a0 202 eth.init("192.168.201.59", "255.255.255.0", "192.168.201.253");
faverosantos 0:71e5f03dd7a0 203 serial_debug.printf("\r -- Mac Address is: %s \n", eth.getMACAddress());
faverosantos 0:71e5f03dd7a0 204
faverosantos 0:71e5f03dd7a0 205 is_connected = eth.connect();
faverosantos 0:71e5f03dd7a0 206 if (is_connected == 0){
faverosantos 0:71e5f03dd7a0 207 serial_debug.printf("\r -- Connection OK!! \n");
faverosantos 0:71e5f03dd7a0 208 }else if (is_connected != 0){
faverosantos 0:71e5f03dd7a0 209 serial_debug.printf("\r -- Connect NOK!! \n");
faverosantos 0:71e5f03dd7a0 210 serial_debug.printf("\r -- Error code: %d\n", is_connected);
faverosantos 0:71e5f03dd7a0 211 }
faverosantos 0:71e5f03dd7a0 212 serial_debug.printf("\r -- IP Address is: %s \n", eth.getIPAddress());
faverosantos 0:71e5f03dd7a0 213 serial_debug.printf("\r -- Mask Address is: %s \n", eth.getNetworkMask());
faverosantos 0:71e5f03dd7a0 214 serial_debug.printf("\r -- Gateway Address is: %s \n", eth.getGateway());
faverosantos 0:71e5f03dd7a0 215
faverosantos 0:71e5f03dd7a0 216 /* Socket init */
faverosantos 0:71e5f03dd7a0 217 while (sock.connect(ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT) < 0) {
faverosantos 0:71e5f03dd7a0 218 serial_debug.printf("\r -- Unable to connect to (%s) on port (%d)\n", ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT);
faverosantos 0:71e5f03dd7a0 219 wait(1);
faverosantos 0:71e5f03dd7a0 220 }
faverosantos 0:71e5f03dd7a0 221 serial_debug.printf("\r -- Connected to Server at %s\n",ECHO_SERVER_ADDRESS);
faverosantos 0:71e5f03dd7a0 222 }