proculus_display_pulga
Diff: Source/main.cpp
- Revision:
- 2:afae00ebf9ba
- Parent:
- 1:2e4f9cb1c3e9
--- a/Source/main.cpp Mon Apr 27 17:40:57 2020 +0000 +++ b/Source/main.cpp Mon Apr 27 18:30:55 2020 +0000 @@ -16,31 +16,14 @@ struct proculus_pkt pkt; uint16_t data[255]; char msg[100]; - //char rx_buffer[100]; pkt.buffer = data; int unknow = 0; - //wait(SERIAL_DELAY/1000); - sprintf(msg, "rx_to_rcv=%d",rx_to_rcv); - debug_serial->puts("_|_"); - debug_serial->puts(msg); + //sprintf(msg, "rx_to_rcv=%d",rx_to_rcv); + //debug_serial->puts("_|_"); + //debug_serial->puts(msg); while(serial1.readable() || rx_to_rcv >0){ - //while(!serial1.readable()); serial_rx_buffer[i] = serial1.getc(); - /*if(i == 0 && serial_rx_buffer[0] == 0x5a){//header packet start - i++; - rx_to_rcv--; - while(serial_rx_buffer[i] != 0xa5){ - if(serial1.readable()) - serial_rx_buffer[i] = serial1.getc(); - } - }*/ i++; - /*THIS IS ALTERNATIVE TO SOLVE A BUG, BUT NOT FIX THE BUG - BUG: Uart interrupt is activates twice, then it read the header_h (5a) - close the interruption, open a new one starting from header_l (5a) - then nothing will work fine at all, creating the rx_to_rcv, i know how - many bytes should be read, then just stay here until it complete the - full packet*/ rx_to_rcv --; if(rx_to_rcv <= 0) break; @@ -52,7 +35,7 @@ raw_to_string(serial_rx_buffer, msg, i); debug_serial->puts(msg); debug_serial->puts("_|_"); - sprintf(msg, "i=%d",i); + sprintf(msg, "rcvsize=%d",i); debug_serial->puts(msg); debug_serial->puts("_|_"); } @@ -72,7 +55,7 @@ pkt.address = serial_rx_buffer[4]; pkt.lenght = serial_rx_buffer[5]; while(j < pkt.lenght){ - pkt.buffer[i] = serial_rx_buffer[6 + j]; + pkt.buffer[j] = serial_rx_buffer[6 + j]; j++; } } @@ -93,31 +76,17 @@ unknow = 1;//received something unknow } - if(unknow ==0){ - //sprintf(msg, "rx_buffer[0]=%x|i=%d", rx_buffer[0],i); - //debug_serial->puts(msg); - - if(serial_rx_buffer[3] == R_VP){ + if(unknow ==0){ + if(pkt.cmd == R_VP){ //if(pkt.address == 0x32){ //data[0] = data[0] + 1; //proculus_set_vp(0x5, 10, pkt.buffer); //} } - if(pkt.cmd == R_CTRL_REG){// - //if(serial_rx_buffer[3] == R_CTRL_REG){//from a read control register comand - //sprintf(msg, "pkt.address=%x",pkt.address ); - //sprintf(msg, "serial_rx_buffer[4]=%x",serial_rx_buffer[4]); - //debug_serial->puts(msg); - //debug_serial->puts("_|_"); - if(pkt.address == PIC_ID_H){// - //if(serial_rx_buffer[4] == PIC_ID_H){//read screen cmd - //screen_id = (serial_rx_buffer[6] << 8 ); - //screen_id |= serial_rx_buffer[7]; + if(pkt.cmd == R_CTRL_REG){//from a read control register comand + if(pkt.address == PIC_ID_H){//read screen cmd screen_id = (pkt.buffer[0] << 8 ); screen_id |= pkt.buffer[1]; - sprintf(msg, "screen_id=%x",screen_id); - debug_serial->puts(msg); - debug_serial->puts("_|_"); if(screen_id == SCREEN_CALIBRATING) jump_to_screen(0x46); else @@ -130,9 +99,6 @@ debug_serial->puts("unknowPKT"); debug_serial->puts("_|_"); } - //sprintf(msg, "pkt.address=%x", serial_rx_buffer[1]); - //strcpy(serial_rx_buffer, "init"); - //debug_serial->puts(msg); } @@ -167,8 +133,6 @@ struct proculus_pkt pkt; //setup the device rx irq handler serial1.attach(&serial_rx_irq, RawSerial::RxIrq); - //serial1->attach(&serial_tx_irq, RawSerial::TxIrq); - //serial1->attach(&serial_rx_irq); //setup the baud rate to match with display serial1.baud(115200); #ifdef DEBUG_SERIAL @@ -180,6 +144,7 @@ while(1) { if(!sensor_open){//are the device secure to operate? + get_screen_at_irq(); wait(3); }else{