MaternoFetal

Fork of mbed-os-example-tcp-server by mbed_example

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "EthernetInterface.h"
00003 #include "TCPServer.h"
00004 #include "TCPSocket.h"
00005 #include "ADS1299.h"
00006 //SPI device(SPI_MOSI, SPI_MISO, SPI_SCK);
00007 SPI device(PC_12, PC_11, PC_10);
00008 Serial pc(SERIAL_TX, SERIAL_RX);
00009 DigitalOut CS(D10);
00010 DigitalOut ledG(LED1);
00011 DigitalOut ledR(LED3);
00012 InterruptIn DDRY(D15);
00013 DigitalOut reset(D14);
00014 DigitalOut START(D9);
00015 
00016 #define buffe 356
00017 
00018 const uint32_t lenght_char=(buffe*3)+3;
00019 unsigned char b1[lenght_char],*b2[lenght_char];
00020 uint32_t ciclo,_m;
00021 bool a,bandera;
00022 
00023 int leer(void)    //concatena 24 bits
00024 {
00025     uint32_t rdata;
00026     rdata  = device.write(0);
00027     rdata<<=8;
00028     rdata|=device.write(0);
00029     rdata<<=8;
00030     rdata|=device.write(0);
00031     return rdata;
00032 }
00033 
00034 int complement(uint32_t ch)// conversion twos complement
00035 {
00036     int32_t sch;
00037     if(ch>0x7FFFFF) {
00038         ch|=0xFF800000;
00039         ch--;
00040         ch=~ch;
00041         sch = -ch;
00042     } else if(ch<=0x7FFFFF) {
00043         sch = ch;
00044     }
00045     sch+= 0x7FFFFF; //offset, solo valores positivos
00046     return sch;
00047 }
00048 
00049 int buffy(uint32_t _ch)
00050 {
00051     //_ch+=0x7FFFFF;
00052     uint8_t c1,c2,c3;
00053     c1=_ch>>16;
00054     b1[ciclo]=c1;
00055     ciclo++;
00056     c2=_ch>>8;
00057     b1[ciclo]=c2;
00058     ciclo++;
00059     c3=_ch;
00060     b1[ciclo]=c3;
00061     ciclo++;
00062     return 0;
00063 }
00064 
00065 void send_data()
00066 {
00067     if (bandera == 0) {
00068         buffy(0xffffff);
00069         bandera|=1;
00070     }
00071 
00072     uint32_t statu,ch1,ch2,ch3,ch4,ch5;
00073     int32_t sch2;
00074     //  uint8_t c1,c2,c3;
00075     statu  = leer();
00076     ch1  = leer();
00077     ch2  = leer();
00078     ch3  = leer();
00079     ch4  = leer();
00080     ch5  = leer();
00081 
00082     //  sch2=complement(ch2);
00083      // buffy(sch2);
00084       //sch2=complement(ch3);
00085      // buffy(0);
00086       //sch2=complement(ch4);
00087       //buffy(0);
00088       //sch2=complement(ch5);
00089       //buffy(0);
00090             
00091             sch2=complement(ch2);
00092      buffy(sch2);
00093     sch2=complement(ch3);
00094    buffy(sch2);
00095     sch2=complement(ch4);
00096      buffy(sch2);
00097    sch2=complement(ch5);
00098      buffy(sch2);
00099 
00100     if(ciclo>=lenght_char) {
00101         bandera&=~bandera;
00102         memcpy(&b2, &b1, lenght_char);
00103         ciclo=0;
00104         a=1;
00105     }
00106 
00107 }
00108 
00109 int main()
00110 {
00111 
00112     pc.printf("hi, ");
00113 ////////////seteo de ethernet
00114     EthernetInterface eth;
00115     eth.connect();
00116     pc.printf("The Server IP address is '%s'  ", eth.get_ip_address());
00117     TCPServer srv;
00118     TCPSocket client_sock;
00119     SocketAddress client_addr;
00120     srv.open(&eth);
00121     srv.bind(eth.get_ip_address(), 8085);
00122     srv.listen(1);
00123     ledG = 1;
00124     srv.accept(&client_sock, &client_addr);
00125     pc.printf("Accepted %s:%d  ", client_addr.get_ip_address(),
00126               client_addr.get_port());
00127 
00128     ///////////////////Wake up ADS
00129     //  pc.printf("ADS1299- Nucleo -F767ZI \n");
00130     device.format(8,1);
00131     device.frequency(4000000);
00132     START=0;
00133     reset=1;
00134     wait(0.2);
00135     reset=0;
00136     CS=1;
00137     wait_us(10);
00138     reset = !reset;
00139     wait_us(40);
00140 /////////////////////////////////////
00141 
00142 
00143 
00144 /////////////SDATAC para escribir sobre registros
00145     CS = 0;
00146     wait_us(1);
00147     device.write(0x11);
00148     wait_us(4);//tsccs = 4 Tclk
00149     CS = 1;
00150     wait_us(2);//tsch = 2 Tclk
00151 //////////////////////////////////////////////////////////
00152 
00153     ////////////leer ID
00154     int _id;
00155     CS = 0;
00156     wait_us(1);
00157     device.write(RREG|ID);  //read
00158     device.write(0x00);
00159     _id=device.write(0x00);
00160     wait_us(4);
00161     CS=1;
00162     wait_us(2);
00163 ////////////////////////
00164     pc.printf("ID register: %X\n",_id);
00165 
00166 
00167 
00168 ////////// SETEAR CONFIGURACION   (todos los registros)
00169     CS = 0;
00170     wait_us(5);
00171     device.write(WREG|CONFIG1);  //write desde config 1
00172     device.write(0x16);         // escribir sobre 23 registros
00173     device.write(0x94);        //CONFIG1
00174     device.write(0xc0);       //CONFIG2     //c0 normal   //d0 Test source
00175     device.write(0xe0);      //CONFIG3
00176     device.write(0x00);     //LOFF
00177     device.write(0x68);          //CH1SET   //ref channel
00178     device.write(0x60);         //CH2SET     //65 cuadrada  //60 electrodo
00179     device.write(0x60);        //CH3SET
00180     device.write(0x60);       //CH4SET
00181     device.write(0x60);      //CH5SET // si no los uso 81
00182     device.write(0x81);     //CH6SET
00183     device.write(0x81);    //CH7SET
00184     device.write(0x81);   //CH8SET
00185     device.write(0x00);          //BIAS_SENSP
00186     device.write(0x00);         //BIAS_SENSN
00187     device.write(0x00);        //LOFF_SENSP
00188     device.write(0x00);       //LOFF_SENSN
00189     device.write(0x00);      //LOFF_FLIP
00190     device.write(0x00);     //LOFF_STATP
00191     device.write(0x00);    //LOFF_STATN
00192     device.write(0x0f);   //GPIO
00193     device.write(0x20);  //MISC1
00194     device.write(0x00); //MISC2
00195     device.write(0x00);//CONFIG4
00196     wait_us(4);
00197     CS=1;
00198     wait_us(2);
00199 ///////////////////////////////////////
00200 
00201 ////////////////INICIO A _RDATAC
00202     CS = 0;
00203     wait_us(1);
00204     device.write(_RDATAC);
00205     wait_us(4);
00206     CS=1;
00207     wait_us(2);
00208     START=1;
00209     CS = 0;
00210     wait_ms(10);//tsettle
00211 //////////////////////////
00212 //    int _by=0;
00213     // client_sock.recv(reading, 8);
00214     // client_sock.set_blocking(false);
00215     // DDRY.mode(PullUp);
00216 //NVIC_SetPriority(TIMER3_IRQn, 200);
00217     send_data();
00218     DDRY.fall(&send_data);
00219     //  DDRY.disable_irq();
00220   wait_ms(buffe);
00221     // restart.attach(&send_data, 0.001);
00222     while(1) {
00223         while (a==1) {
00224             client_sock.send(&b2, lenght_char);
00225             a=0;
00226         }
00227         //   fflush();
00228         __wfi();
00229     }
00230     client_sock.close();
00231 }