proculus_display_pulga

Committer:
ruschigo
Date:
Mon Apr 27 18:30:55 2020 +0000
Revision:
2:afae00ebf9ba
Parent:
1:2e4f9cb1c3e9
the change screen behaviour is pretty well

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ruschigo 1:2e4f9cb1c3e9 1 #include "mbed.h"
ruschigo 1:2e4f9cb1c3e9 2 #include "proculus_display.h"
ruschigo 1:2e4f9cb1c3e9 3
ruschigo 1:2e4f9cb1c3e9 4 unsigned int sensor_open;//fim de curso fake
ruschigo 1:2e4f9cb1c3e9 5
ruschigo 1:2e4f9cb1c3e9 6 #define SCREEN_CALIBRATING 0x14
ruschigo 1:2e4f9cb1c3e9 7
ruschigo 1:2e4f9cb1c3e9 8 uint16_t screen_id = 0x00;
ruschigo 1:2e4f9cb1c3e9 9
ruschigo 1:2e4f9cb1c3e9 10 void serial_tx_irq(){
ruschigo 1:2e4f9cb1c3e9 11 debug_serial->puts("TX");
ruschigo 1:2e4f9cb1c3e9 12 }
ruschigo 1:2e4f9cb1c3e9 13
ruschigo 1:2e4f9cb1c3e9 14 void serial_rx_irq(){
ruschigo 1:2e4f9cb1c3e9 15 int i = 0, j, k;
ruschigo 1:2e4f9cb1c3e9 16 struct proculus_pkt pkt;
ruschigo 1:2e4f9cb1c3e9 17 uint16_t data[255];
ruschigo 1:2e4f9cb1c3e9 18 char msg[100];
ruschigo 1:2e4f9cb1c3e9 19 pkt.buffer = data;
ruschigo 1:2e4f9cb1c3e9 20 int unknow = 0;
ruschigo 2:afae00ebf9ba 21 //sprintf(msg, "rx_to_rcv=%d",rx_to_rcv);
ruschigo 2:afae00ebf9ba 22 //debug_serial->puts("_|_");
ruschigo 2:afae00ebf9ba 23 //debug_serial->puts(msg);
ruschigo 1:2e4f9cb1c3e9 24 while(serial1.readable() || rx_to_rcv >0){
ruschigo 1:2e4f9cb1c3e9 25 serial_rx_buffer[i] = serial1.getc();
ruschigo 1:2e4f9cb1c3e9 26 i++;
ruschigo 1:2e4f9cb1c3e9 27 rx_to_rcv --;
ruschigo 1:2e4f9cb1c3e9 28 if(rx_to_rcv <= 0)
ruschigo 1:2e4f9cb1c3e9 29 break;
ruschigo 1:2e4f9cb1c3e9 30 }
ruschigo 1:2e4f9cb1c3e9 31 #ifdef DEBUG_SERIAL
ruschigo 1:2e4f9cb1c3e9 32 //debug_puts(rx_buffer, i);//print pure data to be read as hex
ruschigo 1:2e4f9cb1c3e9 33 if(i>1){
ruschigo 1:2e4f9cb1c3e9 34 debug_serial->puts("_|_");
ruschigo 1:2e4f9cb1c3e9 35 raw_to_string(serial_rx_buffer, msg, i);
ruschigo 1:2e4f9cb1c3e9 36 debug_serial->puts(msg);
ruschigo 1:2e4f9cb1c3e9 37 debug_serial->puts("_|_");
ruschigo 2:afae00ebf9ba 38 sprintf(msg, "rcvsize=%d",i);
ruschigo 1:2e4f9cb1c3e9 39 debug_serial->puts(msg);
ruschigo 1:2e4f9cb1c3e9 40 debug_serial->puts("_|_");
ruschigo 1:2e4f9cb1c3e9 41 }
ruschigo 1:2e4f9cb1c3e9 42
ruschigo 1:2e4f9cb1c3e9 43 #endif
ruschigo 1:2e4f9cb1c3e9 44 if(i>1 && rx_to_rcv == 0){
ruschigo 1:2e4f9cb1c3e9 45 if(serial_rx_buffer[3] >= 0x80 && serial_rx_buffer[3] <= 0x84)
ruschigo 1:2e4f9cb1c3e9 46 //serial_to_proculus_pkt(&pkt);
ruschigo 1:2e4f9cb1c3e9 47 {
ruschigo 1:2e4f9cb1c3e9 48 j = 0;
ruschigo 1:2e4f9cb1c3e9 49 k = 0;
ruschigo 1:2e4f9cb1c3e9 50 pkt.header_h = serial_rx_buffer[0];
ruschigo 1:2e4f9cb1c3e9 51 pkt.header_l = serial_rx_buffer[1];
ruschigo 1:2e4f9cb1c3e9 52 pkt.count = serial_rx_buffer[2];
ruschigo 1:2e4f9cb1c3e9 53 pkt.cmd = serial_rx_buffer[3];
ruschigo 1:2e4f9cb1c3e9 54 if(pkt.cmd == R_CTRL_REG){
ruschigo 1:2e4f9cb1c3e9 55 pkt.address = serial_rx_buffer[4];
ruschigo 1:2e4f9cb1c3e9 56 pkt.lenght = serial_rx_buffer[5];
ruschigo 1:2e4f9cb1c3e9 57 while(j < pkt.lenght){
ruschigo 2:afae00ebf9ba 58 pkt.buffer[j] = serial_rx_buffer[6 + j];
ruschigo 1:2e4f9cb1c3e9 59 j++;
ruschigo 1:2e4f9cb1c3e9 60 }
ruschigo 1:2e4f9cb1c3e9 61 }
ruschigo 1:2e4f9cb1c3e9 62 else{
ruschigo 1:2e4f9cb1c3e9 63 pkt.address = serial_rx_buffer[4] << 8;
ruschigo 1:2e4f9cb1c3e9 64 pkt.address |= serial_rx_buffer[5];
ruschigo 1:2e4f9cb1c3e9 65 pkt.lenght = serial_rx_buffer[6];
ruschigo 1:2e4f9cb1c3e9 66 while(j < pkt.lenght){
ruschigo 1:2e4f9cb1c3e9 67 pkt.buffer[j] = serial_rx_buffer[7 + k] << 8;
ruschigo 1:2e4f9cb1c3e9 68 pkt.buffer[j] |= serial_rx_buffer[8 + k];
ruschigo 1:2e4f9cb1c3e9 69 j++;
ruschigo 1:2e4f9cb1c3e9 70 k += 2;
ruschigo 1:2e4f9cb1c3e9 71 }
ruschigo 1:2e4f9cb1c3e9 72 }
ruschigo 1:2e4f9cb1c3e9 73 unknow=0;
ruschigo 1:2e4f9cb1c3e9 74 }
ruschigo 1:2e4f9cb1c3e9 75 else
ruschigo 1:2e4f9cb1c3e9 76 unknow = 1;//received something unknow
ruschigo 1:2e4f9cb1c3e9 77 }
ruschigo 1:2e4f9cb1c3e9 78
ruschigo 2:afae00ebf9ba 79 if(unknow ==0){
ruschigo 2:afae00ebf9ba 80 if(pkt.cmd == R_VP){
ruschigo 1:2e4f9cb1c3e9 81 //if(pkt.address == 0x32){
ruschigo 1:2e4f9cb1c3e9 82 //data[0] = data[0] + 1;
ruschigo 1:2e4f9cb1c3e9 83 //proculus_set_vp(0x5, 10, pkt.buffer);
ruschigo 1:2e4f9cb1c3e9 84 //}
ruschigo 1:2e4f9cb1c3e9 85 }
ruschigo 2:afae00ebf9ba 86 if(pkt.cmd == R_CTRL_REG){//from a read control register comand
ruschigo 2:afae00ebf9ba 87 if(pkt.address == PIC_ID_H){//read screen cmd
ruschigo 1:2e4f9cb1c3e9 88 screen_id = (pkt.buffer[0] << 8 );
ruschigo 1:2e4f9cb1c3e9 89 screen_id |= pkt.buffer[1];
ruschigo 1:2e4f9cb1c3e9 90 if(screen_id == SCREEN_CALIBRATING)
ruschigo 1:2e4f9cb1c3e9 91 jump_to_screen(0x46);
ruschigo 1:2e4f9cb1c3e9 92 else
ruschigo 1:2e4f9cb1c3e9 93 jump_to_screen(0);
ruschigo 1:2e4f9cb1c3e9 94 }else
ruschigo 1:2e4f9cb1c3e9 95 jump_to_screen(96);
ruschigo 1:2e4f9cb1c3e9 96 }
ruschigo 1:2e4f9cb1c3e9 97 }
ruschigo 1:2e4f9cb1c3e9 98 else{
ruschigo 1:2e4f9cb1c3e9 99 debug_serial->puts("unknowPKT");
ruschigo 1:2e4f9cb1c3e9 100 debug_serial->puts("_|_");
ruschigo 1:2e4f9cb1c3e9 101 }
ruschigo 1:2e4f9cb1c3e9 102
ruschigo 1:2e4f9cb1c3e9 103 }
ruschigo 1:2e4f9cb1c3e9 104
ruschigo 1:2e4f9cb1c3e9 105
ruschigo 1:2e4f9cb1c3e9 106 //stop all measures, and stop any action
ruschigo 1:2e4f9cb1c3e9 107 int system_stop(){
ruschigo 1:2e4f9cb1c3e9 108 return 0;
ruschigo 1:2e4f9cb1c3e9 109 }
ruschigo 1:2e4f9cb1c3e9 110
ruschigo 1:2e4f9cb1c3e9 111 int get_screen_at_irq(){
ruschigo 1:2e4f9cb1c3e9 112 int i = 0;
ruschigo 1:2e4f9cb1c3e9 113 strcpy(serial_rx_buffer, "");
ruschigo 1:2e4f9cb1c3e9 114 while(serial1.readable()){//clean anything in buffer before send cmd
ruschigo 1:2e4f9cb1c3e9 115 serial_rx_buffer[i] = serial1.getc();
ruschigo 1:2e4f9cb1c3e9 116 i++;
ruschigo 1:2e4f9cb1c3e9 117 }
ruschigo 1:2e4f9cb1c3e9 118 //serial1.attach(0);
ruschigo 1:2e4f9cb1c3e9 119 while(rx_to_rcv);
ruschigo 1:2e4f9cb1c3e9 120 proculus_get_ctrl(0x3, PIC_ID_H, 0x2);
ruschigo 1:2e4f9cb1c3e9 121 //serial1.attach(&serial_rx_irq);
ruschigo 1:2e4f9cb1c3e9 122 return 0;
ruschigo 1:2e4f9cb1c3e9 123 }
ruschigo 1:2e4f9cb1c3e9 124
ruschigo 1:2e4f9cb1c3e9 125 int main()
ruschigo 1:2e4f9cb1c3e9 126 {
ruschigo 1:2e4f9cb1c3e9 127 //simulate sensor "fim de curso"
ruschigo 1:2e4f9cb1c3e9 128 sensor_open = 0;
ruschigo 1:2e4f9cb1c3e9 129
ruschigo 1:2e4f9cb1c3e9 130 uint16_t data[100];//buffer to store vp datas
ruschigo 1:2e4f9cb1c3e9 131 uint16_t ctrl_data[2];//buffer to store ctrl_reg datas
ruschigo 1:2e4f9cb1c3e9 132 int i = 0x00, j=0;
ruschigo 1:2e4f9cb1c3e9 133 struct proculus_pkt pkt;
ruschigo 1:2e4f9cb1c3e9 134 //setup the device rx irq handler
ruschigo 1:2e4f9cb1c3e9 135 serial1.attach(&serial_rx_irq, RawSerial::RxIrq);
ruschigo 1:2e4f9cb1c3e9 136 //setup the baud rate to match with display
ruschigo 1:2e4f9cb1c3e9 137 serial1.baud(115200);
ruschigo 1:2e4f9cb1c3e9 138 #ifdef DEBUG_SERIAL
ruschigo 1:2e4f9cb1c3e9 139 debug_serial->baud(115200);
ruschigo 1:2e4f9cb1c3e9 140 debug_serial->puts("start");
ruschigo 1:2e4f9cb1c3e9 141 #endif
ruschigo 1:2e4f9cb1c3e9 142 wait(3);
ruschigo 1:2e4f9cb1c3e9 143 sensor_open = 0;
ruschigo 1:2e4f9cb1c3e9 144 while(1) {
ruschigo 1:2e4f9cb1c3e9 145
ruschigo 1:2e4f9cb1c3e9 146 if(!sensor_open){//are the device secure to operate?
ruschigo 2:afae00ebf9ba 147
ruschigo 1:2e4f9cb1c3e9 148 get_screen_at_irq();
ruschigo 1:2e4f9cb1c3e9 149 wait(3);
ruschigo 1:2e4f9cb1c3e9 150 }else{
ruschigo 1:2e4f9cb1c3e9 151 system_stop();
ruschigo 1:2e4f9cb1c3e9 152 jump_to_screen(SCREEN_CALIBRATING);
ruschigo 1:2e4f9cb1c3e9 153 #ifdef DEBUG_CONSOLE
ruschigo 1:2e4f9cb1c3e9 154 debug_serial->puts("Check if the device is properly closed");
ruschigo 1:2e4f9cb1c3e9 155 #endif
ruschigo 1:2e4f9cb1c3e9 156 }
ruschigo 1:2e4f9cb1c3e9 157 //if(sensor_open != 0)//simulates that the door is open for 3 seconds
ruschigo 1:2e4f9cb1c3e9 158 //{
ruschigo 1:2e4f9cb1c3e9 159 // sensor_open--;
ruschigo 1:2e4f9cb1c3e9 160 // wait(1);
ruschigo 1:2e4f9cb1c3e9 161 //}
ruschigo 1:2e4f9cb1c3e9 162 }
ruschigo 1:2e4f9cb1c3e9 163 }