![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
This is the the starting version of autograder hardwrae
Fork of AutoGrader_HW_01 by
main.cpp@1:97884b766b51, 2015-08-31 (annotated)
- Committer:
- naray23
- Date:
- Mon Aug 31 12:46:13 2015 +0000
- Revision:
- 1:97884b766b51
- Parent:
- 0:440ae480bff2
- Child:
- 2:b3286d232452
This is the autograder demo code developed by gopal and ganesh
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
naray23 | 0:440ae480bff2 | 1 | #include "mbed.h" |
naray23 | 0:440ae480bff2 | 2 | |
naray23 | 1:97884b766b51 | 3 | Ticker Read_Port; //Timer Polling |
naray23 | 1:97884b766b51 | 4 | |
naray23 | 0:440ae480bff2 | 5 | PortIn DataIn(PortC, 0x000000FF); // p21-p26 |
naray23 | 1:97884b766b51 | 6 | DigitalOut Reset(PTC12); //ptc12 reset |
naray23 | 1:97884b766b51 | 7 | Serial Comm(USBTX, USBRX); |
naray23 | 0:440ae480bff2 | 8 | |
naray23 | 0:440ae480bff2 | 9 | #define RX_BUFF_SIZE 64 |
naray23 | 0:440ae480bff2 | 10 | |
naray23 | 0:440ae480bff2 | 11 | int rx_write_ptr=0; |
naray23 | 0:440ae480bff2 | 12 | int rx_read_ptr=0; |
naray23 | 0:440ae480bff2 | 13 | int RX_buff[RX_BUFF_SIZE]; |
naray23 | 0:440ae480bff2 | 14 | |
naray23 | 0:440ae480bff2 | 15 | int Data_avl; |
naray23 | 0:440ae480bff2 | 16 | int Port_Data; |
naray23 | 1:97884b766b51 | 17 | int Port_Data_prev=0; |
naray23 | 1:97884b766b51 | 18 | int Time_cntr=0; |
naray23 | 0:440ae480bff2 | 19 | |
naray23 | 0:440ae480bff2 | 20 | void Serial_Read_callback() |
naray23 | 0:440ae480bff2 | 21 | { |
naray23 | 0:440ae480bff2 | 22 | RX_buff[rx_write_ptr++]=Comm.getc(); |
naray23 | 0:440ae480bff2 | 23 | if(rx_write_ptr >= RX_BUFF_SIZE) |
naray23 | 0:440ae480bff2 | 24 | rx_write_ptr=0; |
naray23 | 0:440ae480bff2 | 25 | |
naray23 | 0:440ae480bff2 | 26 | } |
naray23 | 0:440ae480bff2 | 27 | |
naray23 | 0:440ae480bff2 | 28 | int Serial_Read() |
naray23 | 0:440ae480bff2 | 29 | { |
naray23 | 0:440ae480bff2 | 30 | int temp; |
naray23 | 0:440ae480bff2 | 31 | |
naray23 | 0:440ae480bff2 | 32 | temp=RX_buff[rx_read_ptr++]; |
naray23 | 0:440ae480bff2 | 33 | if(rx_read_ptr >= RX_BUFF_SIZE) |
naray23 | 0:440ae480bff2 | 34 | rx_read_ptr=0; |
naray23 | 0:440ae480bff2 | 35 | return temp; |
naray23 | 0:440ae480bff2 | 36 | } |
naray23 | 0:440ae480bff2 | 37 | |
naray23 | 0:440ae480bff2 | 38 | int Serial_Available() |
naray23 | 0:440ae480bff2 | 39 | { |
naray23 | 0:440ae480bff2 | 40 | if(rx_read_ptr != rx_write_ptr) |
naray23 | 0:440ae480bff2 | 41 | return 1; |
naray23 | 0:440ae480bff2 | 42 | else |
naray23 | 0:440ae480bff2 | 43 | return 0; |
naray23 | 0:440ae480bff2 | 44 | } |
naray23 | 0:440ae480bff2 | 45 | |
naray23 | 0:440ae480bff2 | 46 | void Read_Port_callback() |
naray23 | 0:440ae480bff2 | 47 | { |
naray23 | 0:440ae480bff2 | 48 | Port_Data=DataIn.read(); |
naray23 | 1:97884b766b51 | 49 | if((Port_Data ^ Port_Data_prev) != 0) |
naray23 | 1:97884b766b51 | 50 | { |
naray23 | 1:97884b766b51 | 51 | Data_avl=1; |
naray23 | 1:97884b766b51 | 52 | Port_Data_prev=Port_Data; |
naray23 | 1:97884b766b51 | 53 | } |
naray23 | 1:97884b766b51 | 54 | Time_cntr++; |
naray23 | 0:440ae480bff2 | 55 | } |
naray23 | 0:440ae480bff2 | 56 | |
naray23 | 0:440ae480bff2 | 57 | int main() |
naray23 | 0:440ae480bff2 | 58 | { |
naray23 | 0:440ae480bff2 | 59 | int ch; |
naray23 | 0:440ae480bff2 | 60 | int state=0; |
naray23 | 1:97884b766b51 | 61 | int cmd=0;; |
naray23 | 1:97884b766b51 | 62 | int paramval[3][3]; |
naray23 | 1:97884b766b51 | 63 | int paramstate=0; |
naray23 | 1:97884b766b51 | 64 | int paramdigcnt=0; |
naray23 | 1:97884b766b51 | 65 | int new_frame=0; |
naray23 | 1:97884b766b51 | 66 | int run_debug=0; |
naray23 | 1:97884b766b51 | 67 | |
naray23 | 1:97884b766b51 | 68 | float scan_time; |
naray23 | 0:440ae480bff2 | 69 | Comm.baud(115200); |
naray23 | 0:440ae480bff2 | 70 | Comm.attach(&Serial_Read_callback); |
naray23 | 0:440ae480bff2 | 71 | |
naray23 | 0:440ae480bff2 | 72 | while(true) |
naray23 | 0:440ae480bff2 | 73 | { |
naray23 | 0:440ae480bff2 | 74 | if(Serial_Available()) |
naray23 | 0:440ae480bff2 | 75 | { |
naray23 | 0:440ae480bff2 | 76 | ch=Serial_Read(); |
naray23 | 1:97884b766b51 | 77 | Comm.printf("%c",ch,state); |
naray23 | 0:440ae480bff2 | 78 | switch (state) |
naray23 | 0:440ae480bff2 | 79 | { |
naray23 | 0:440ae480bff2 | 80 | case 0: if(ch == '<') |
naray23 | 1:97884b766b51 | 81 | { |
naray23 | 0:440ae480bff2 | 82 | state++; |
naray23 | 1:97884b766b51 | 83 | paramstate=0;; |
naray23 | 1:97884b766b51 | 84 | } |
naray23 | 1:97884b766b51 | 85 | |
naray23 | 0:440ae480bff2 | 86 | break; |
naray23 | 0:440ae480bff2 | 87 | |
naray23 | 0:440ae480bff2 | 88 | case 1: cmd = ch; |
naray23 | 0:440ae480bff2 | 89 | state++; |
naray23 | 0:440ae480bff2 | 90 | break; |
naray23 | 0:440ae480bff2 | 91 | |
naray23 | 1:97884b766b51 | 92 | case 2: if(ch == ',') |
naray23 | 1:97884b766b51 | 93 | { |
naray23 | 1:97884b766b51 | 94 | paramstate++; |
naray23 | 1:97884b766b51 | 95 | paramdigcnt=2; |
naray23 | 1:97884b766b51 | 96 | } |
naray23 | 1:97884b766b51 | 97 | else if(ch == '>') |
naray23 | 0:440ae480bff2 | 98 | { |
naray23 | 0:440ae480bff2 | 99 | state=0; |
naray23 | 0:440ae480bff2 | 100 | new_frame =1; |
naray23 | 1:97884b766b51 | 101 | |
naray23 | 1:97884b766b51 | 102 | } |
naray23 | 1:97884b766b51 | 103 | else |
naray23 | 1:97884b766b51 | 104 | { |
naray23 | 1:97884b766b51 | 105 | paramval[paramstate-1][paramdigcnt--]=ch-'0'; |
naray23 | 0:440ae480bff2 | 106 | } |
naray23 | 0:440ae480bff2 | 107 | break; |
naray23 | 0:440ae480bff2 | 108 | |
naray23 | 0:440ae480bff2 | 109 | |
naray23 | 0:440ae480bff2 | 110 | }//switch |
naray23 | 0:440ae480bff2 | 111 | |
naray23 | 0:440ae480bff2 | 112 | |
naray23 | 0:440ae480bff2 | 113 | }//Serial_available |
naray23 | 0:440ae480bff2 | 114 | |
naray23 | 0:440ae480bff2 | 115 | if(new_frame) |
naray23 | 0:440ae480bff2 | 116 | { |
naray23 | 1:97884b766b51 | 117 | Comm.printf("\n\rStarted polling Command=%c \n\r",cmd); |
naray23 | 0:440ae480bff2 | 118 | new_frame =0; |
naray23 | 1:97884b766b51 | 119 | Port_Data_prev=0; |
naray23 | 1:97884b766b51 | 120 | Time_cntr=0; |
naray23 | 0:440ae480bff2 | 121 | if(cmd == 'P') |
naray23 | 0:440ae480bff2 | 122 | { |
naray23 | 1:97884b766b51 | 123 | scan_time= (paramval[0][0]-+paramval[0][1]* 10 + paramval[0][2] * 100)*0.01; |
naray23 | 1:97884b766b51 | 124 | Comm.printf("Scan Time %f mS \n\r",scan_time*1000); |
naray23 | 1:97884b766b51 | 125 | Read_Port.attach(&Read_Port_callback,scan_time); |
naray23 | 0:440ae480bff2 | 126 | Reset=0; |
naray23 | 0:440ae480bff2 | 127 | wait(0.01); |
naray23 | 0:440ae480bff2 | 128 | Reset=1; |
naray23 | 0:440ae480bff2 | 129 | run_debug=1; |
naray23 | 0:440ae480bff2 | 130 | } |
naray23 | 0:440ae480bff2 | 131 | else if(cmd == 'X') |
naray23 | 0:440ae480bff2 | 132 | { |
naray23 | 0:440ae480bff2 | 133 | Read_Port.detach(); |
naray23 | 0:440ae480bff2 | 134 | run_debug=0; |
naray23 | 0:440ae480bff2 | 135 | } |
naray23 | 0:440ae480bff2 | 136 | |
naray23 | 0:440ae480bff2 | 137 | } |
naray23 | 0:440ae480bff2 | 138 | if(run_debug) |
naray23 | 0:440ae480bff2 | 139 | { |
naray23 | 0:440ae480bff2 | 140 | if(Data_avl) |
naray23 | 0:440ae480bff2 | 141 | { |
naray23 | 1:97884b766b51 | 142 | Comm.printf("<%.4X,%.2X>\n\r",Time_cntr,Port_Data); |
naray23 | 1:97884b766b51 | 143 | Data_avl=0; |
naray23 | 1:97884b766b51 | 144 | Time_cntr=0; |
naray23 | 0:440ae480bff2 | 145 | } |
naray23 | 0:440ae480bff2 | 146 | } |
naray23 | 0:440ae480bff2 | 147 | |
naray23 | 0:440ae480bff2 | 148 | }//while |
naray23 | 0:440ae480bff2 | 149 | } |