proculus_display_pulga
Source/main.cpp@2:afae00ebf9ba, 2020-04-27 (annotated)
- 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?
User | Revision | Line number | New 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 | } |