Module ECAM interfacé au cockpit A320 FS Polytech PAris Sud Orsay Electronique et Systèmes Embarqués
main.cpp@0:c0664cca9901, 2011-03-13 (annotated)
- Committer:
- bouaziz
- Date:
- Sun Mar 13 18:56:29 2011 +0000
- Revision:
- 0:c0664cca9901
- Child:
- 1:1c0e7a7c86fe
ECAM_A320_SERIALCOM
COckpit Polytech PAris Sud A320
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| bouaziz | 0:c0664cca9901 | 1 | #include "mbed.h" |
| bouaziz | 0:c0664cca9901 | 2 | I2C i2c(p28, p27); |
| bouaziz | 0:c0664cca9901 | 3 | Serial pc(USBTX, USBRX); // tx, rx |
| bouaziz | 0:c0664cca9901 | 4 | // Code � respecter pour FS |
| bouaziz | 0:c0664cca9901 | 5 | //Write this offset to trigger an ECAM Control Panel button press. |
| bouaziz | 0:c0664cca9901 | 6 | // The value is 1 for ENG, 2 for BLEED, 3 for PRESS, 4 for ELEC, 5 for HYD, |
| bouaziz | 0:c0664cca9901 | 7 | // 6 for FUEL, 7 for APU, 8 for COND, 9 for DOOR, 10 for WHEEL, 11 fro FCTL, |
| bouaziz | 0:c0664cca9901 | 8 | // 12 for STS, 16 for TO CONFIG, 17 for CLR, 18 for RCL. |
| bouaziz | 0:c0664cca9901 | 9 | // Is set to 0 when the action is done. |
| bouaziz | 0:c0664cca9901 | 10 | |
| bouaziz | 0:c0664cca9901 | 11 | // correspondance touche-bit sur les 8575 |
| bouaziz | 0:c0664cca9901 | 12 | //ADDR2 : X HYD X ALL X CLRD X X INT_UPPER INT_LOWER XX X EMER X FUEL |
| bouaziz | 0:c0664cca9901 | 13 | // 5 23 17 20 21 22 6 |
| bouaziz | 0:c0664cca9901 | 14 | //ADDR1 : X ELEC X Wheel X RCL X STS XXXX X XX F/CTL |
| bouaziz | 0:c0664cca9901 | 15 | // 4 10 18 12 11 |
| bouaziz | 0:c0664cca9901 | 16 | //ADDR0 : X Cond X ENG X APU X CLRG X TOCONFIG X Press X Door X Bleed |
| bouaziz | 0:c0664cca9901 | 17 | // 8 1 7 17 16 3 9 2 |
| bouaziz | 0:c0664cca9901 | 18 | const unsigned LEDt[12]={0x0dfff,0x0fffd,0x0ffdf,0x17fff, |
| bouaziz | 0:c0664cca9901 | 19 | 0x27fff,0x2fffd,0x0f7ff,0x07fff, |
| bouaziz | 0:c0664cca9901 | 20 | 0x0fff7,0x1dfff,0x1fffd,0x1fdff}; |
| bouaziz | 0:c0664cca9901 | 21 | const char mess[23][10]={"ENG","BLEED","PRESS","ELEC","HYD","FUEL","APU", |
| bouaziz | 0:c0664cca9901 | 22 | "COND","DOOR","WHEEL","FCTL","STS"," "," "," ","TOCONFIG", |
| bouaziz | 0:c0664cca9901 | 23 | "CLR","RCL"," ","INT_UP","INT_LOW","EMER","ALL"}; |
| bouaziz | 0:c0664cca9901 | 24 | |
| bouaziz | 0:c0664cca9901 | 25 | const unsigned short lutbutt01[18]={0xefff,0xfffe,0xffef,0x7fff, |
| bouaziz | 0:c0664cca9901 | 26 | 0,0,0xfbff,0xbfff, |
| bouaziz | 0:c0664cca9901 | 27 | 0xfffb,0xdfff,0xfffd,0xfdff, |
| bouaziz | 0:c0664cca9901 | 28 | 0,0,0,0xffbf,0xfeff,0xf7ff}; |
| bouaziz | 0:c0664cca9901 | 29 | |
| bouaziz | 0:c0664cca9901 | 30 | unsigned short addrt[3] = {0x40,0x42,0x44}; // define the I2C Address write pcf1 |
| bouaziz | 0:c0664cca9901 | 31 | unsigned short valt[3],oldt[3]={0xffff,0xffff,0xffff}; |
| bouaziz | 0:c0664cca9901 | 32 | |
| bouaziz | 0:c0664cca9901 | 33 | unsigned char decod_butt(unsigned short *v){ //tableau 3 cases |
| bouaziz | 0:c0664cca9901 | 34 | unsigned short loc=(v[0]&0x5555)| ((v[1]<<1)&0xAAAA); |
| bouaziz | 0:c0664cca9901 | 35 | unsigned short iloc; |
| bouaziz | 0:c0664cca9901 | 36 | |
| bouaziz | 0:c0664cca9901 | 37 | if(loc!=(unsigned short)0xffff){ |
| bouaziz | 0:c0664cca9901 | 38 | iloc=0; |
| bouaziz | 0:c0664cca9901 | 39 | while((iloc<18)&(loc!=lutbutt01[iloc])){ |
| bouaziz | 0:c0664cca9901 | 40 | iloc++; |
| bouaziz | 0:c0664cca9901 | 41 | } |
| bouaziz | 0:c0664cca9901 | 42 | if(iloc<18){ |
| bouaziz | 0:c0664cca9901 | 43 | return iloc+1; |
| bouaziz | 0:c0664cca9901 | 44 | } |
| bouaziz | 0:c0664cca9901 | 45 | return 255; |
| bouaziz | 0:c0664cca9901 | 46 | } |
| bouaziz | 0:c0664cca9901 | 47 | loc=v[2]&0x54C5; |
| bouaziz | 0:c0664cca9901 | 48 | if(loc !=0x5405){ |
| bouaziz | 0:c0664cca9901 | 49 | switch(loc){ |
| bouaziz | 0:c0664cca9901 | 50 | case 0x14C5: return 5; |
| bouaziz | 0:c0664cca9901 | 51 | case 0x44C5: return 23; |
| bouaziz | 0:c0664cca9901 | 52 | case 0x50C5: return 17; |
| bouaziz | 0:c0664cca9901 | 53 | case 0x54c1: return 22; |
| bouaziz | 0:c0664cca9901 | 54 | case 0x54C4: return 6; |
| bouaziz | 0:c0664cca9901 | 55 | |
| bouaziz | 0:c0664cca9901 | 56 | default : |
| bouaziz | 0:c0664cca9901 | 57 | break; |
| bouaziz | 0:c0664cca9901 | 58 | } |
| bouaziz | 0:c0664cca9901 | 59 | } |
| bouaziz | 0:c0664cca9901 | 60 | // reste � traiter les 2 boutons rotatifs .... v[2]&0x00c0 |
| bouaziz | 0:c0664cca9901 | 61 | return 255; |
| bouaziz | 0:c0664cca9901 | 62 | } |
| bouaziz | 0:c0664cca9901 | 63 | |
| bouaziz | 0:c0664cca9901 | 64 | //unsigned short int tt[8]={0xFFFd,0xFFF7,0xFFdF,0xFF7F,0xFdFF,0xF7FF,0xDFFF,0x7FFF}; |
| bouaziz | 0:c0664cca9901 | 65 | void read_ecam(unsigned short *v){ |
| bouaziz | 0:c0664cca9901 | 66 | unsigned char cmd[2]; |
| bouaziz | 0:c0664cca9901 | 67 | oldt[2]=v[2]; |
| bouaziz | 0:c0664cca9901 | 68 | i2c.read(addrt[0]+1, (char *)cmd, 2); |
| bouaziz | 0:c0664cca9901 | 69 | v[0]=cmd[0]*256u+(unsigned short)cmd[1]; |
| bouaziz | 0:c0664cca9901 | 70 | i2c.read(addrt[1]+1, (char *)cmd, 2); |
| bouaziz | 0:c0664cca9901 | 71 | v[1]=cmd[0]*256u+(unsigned short)cmd[1]; |
| bouaziz | 0:c0664cca9901 | 72 | i2c.read(addrt[2]+1, (char *)cmd, 2); |
| bouaziz | 0:c0664cca9901 | 73 | v[2]=cmd[0]*256u+(unsigned short)cmd[1]; |
| bouaziz | 0:c0664cca9901 | 74 | } |
| bouaziz | 0:c0664cca9901 | 75 | |
| bouaziz | 0:c0664cca9901 | 76 | int main() { |
| bouaziz | 0:c0664cca9901 | 77 | unsigned constffff=0xffff; |
| bouaziz | 0:c0664cca9901 | 78 | unsigned short i=0,j=0xFFFF; |
| bouaziz | 0:c0664cca9901 | 79 | char tmp[2]; |
| bouaziz | 0:c0664cca9901 | 80 | unsigned short state=0,touche=0; |
| bouaziz | 0:c0664cca9901 | 81 | pc.printf("COUCOU1\n"); |
| bouaziz | 0:c0664cca9901 | 82 | i2c.write(addrt[0],(char *)&j,2); |
| bouaziz | 0:c0664cca9901 | 83 | i2c.write(addrt[1],(char *)&j,2); |
| bouaziz | 0:c0664cca9901 | 84 | i2c.write(addrt[2],(char *)&j,2); |
| bouaziz | 0:c0664cca9901 | 85 | // pc.printf("COUCOU3\n"); |
| bouaziz | 0:c0664cca9901 | 86 | while (1) { |
| bouaziz | 0:c0664cca9901 | 87 | wait(0.1); |
| bouaziz | 0:c0664cca9901 | 88 | read_ecam(valt); |
| bouaziz | 0:c0664cca9901 | 89 | i=decod_butt(valt); |
| bouaziz | 0:c0664cca9901 | 90 | //pc.printf("%4x %4x %4x %u",valt[0],valt[1],valt[2],i); |
| bouaziz | 0:c0664cca9901 | 91 | if(i<24){ |
| bouaziz | 0:c0664cca9901 | 92 | if(state==0){ |
| bouaziz | 0:c0664cca9901 | 93 | state=1; |
| bouaziz | 0:c0664cca9901 | 94 | touche=i; |
| bouaziz | 0:c0664cca9901 | 95 | } |
| bouaziz | 0:c0664cca9901 | 96 | }else{ |
| bouaziz | 0:c0664cca9901 | 97 | state=0; |
| bouaziz | 0:c0664cca9901 | 98 | } |
| bouaziz | 0:c0664cca9901 | 99 | |
| bouaziz | 0:c0664cca9901 | 100 | if(touche>0){ |
| bouaziz | 0:c0664cca9901 | 101 | pc.printf("X %s %2u\n\r",mess[touche-1],(unsigned) touche); |
| bouaziz | 0:c0664cca9901 | 102 | if(touche<13){ |
| bouaziz | 0:c0664cca9901 | 103 | j=LEDt[touche-1]&0xffff; |
| bouaziz | 0:c0664cca9901 | 104 | tmp[0]= j>>8; |
| bouaziz | 0:c0664cca9901 | 105 | tmp[1]= j&0xff; |
| bouaziz | 0:c0664cca9901 | 106 | j=addrt[LEDt[touche-1]>>16]; |
| bouaziz | 0:c0664cca9901 | 107 | i2c.write(addrt[0],(char *)&constffff,2); |
| bouaziz | 0:c0664cca9901 | 108 | i2c.write(addrt[1],(char *)&constffff,2); |
| bouaziz | 0:c0664cca9901 | 109 | i2c.write(addrt[2],(char *)&constffff,2); |
| bouaziz | 0:c0664cca9901 | 110 | i2c.write(j,tmp,2); |
| bouaziz | 0:c0664cca9901 | 111 | } |
| bouaziz | 0:c0664cca9901 | 112 | touche=0; |
| bouaziz | 0:c0664cca9901 | 113 | } |
| bouaziz | 0:c0664cca9901 | 114 | |
| bouaziz | 0:c0664cca9901 | 115 | /*else{ |
| bouaziz | 0:c0664cca9901 | 116 | pc.printf("\n\r"); |
| bouaziz | 0:c0664cca9901 | 117 | }*/ |
| bouaziz | 0:c0664cca9901 | 118 | |
| bouaziz | 0:c0664cca9901 | 119 | /* |
| bouaziz | 0:c0664cca9901 | 120 | |
| bouaziz | 0:c0664cca9901 | 121 | i2c.read(addrt[i]+1, (char *)cmd, 2); |
| bouaziz | 0:c0664cca9901 | 122 | pc.printf("%2x%2x ",cmd[0],cmd[1]); |
| bouaziz | 0:c0664cca9901 | 123 | wait(0.1); |
| bouaziz | 0:c0664cca9901 | 124 | i=i+1; |
| bouaziz | 0:c0664cca9901 | 125 | if (i==3) { |
| bouaziz | 0:c0664cca9901 | 126 | pc.printf("\n\r"); |
| bouaziz | 0:c0664cca9901 | 127 | i=0; |
| bouaziz | 0:c0664cca9901 | 128 | scanf("%x",&i); |
| bouaziz | 0:c0664cca9901 | 129 | i2c.write(addrt[2],(char *)&i,2); |
| bouaziz | 0:c0664cca9901 | 130 | wait(0.3); |
| bouaziz | 0:c0664cca9901 | 131 | i=0; |
| bouaziz | 0:c0664cca9901 | 132 | } |
| bouaziz | 0:c0664cca9901 | 133 | i2c.write(addrt[0],(char *)(tt+i),2); |
| bouaziz | 0:c0664cca9901 | 134 | pc.printf("%u\n\r",i ); |
| bouaziz | 0:c0664cca9901 | 135 | wait(0.6); |
| bouaziz | 0:c0664cca9901 | 136 | i=(i+1)%8; |
| bouaziz | 0:c0664cca9901 | 137 | |
| bouaziz | 0:c0664cca9901 | 138 | wait(0.1); |
| bouaziz | 0:c0664cca9901 | 139 | i2c.read(addrt[0]+1, (char *)&j, 2); |
| bouaziz | 0:c0664cca9901 | 140 | pc.printf("COUCOU2\n\r"); |
| bouaziz | 0:c0664cca9901 | 141 | j=(j<<1); |
| bouaziz | 0:c0664cca9901 | 142 | j=j|0x5555; |
| bouaziz | 0:c0664cca9901 | 143 | wait_us(70); |
| bouaziz | 0:c0664cca9901 | 144 | i2c.write(addrt[2],(char *)&j,2); |
| bouaziz | 0:c0664cca9901 | 145 | */ |
| bouaziz | 0:c0664cca9901 | 146 | } |
| bouaziz | 0:c0664cca9901 | 147 | } |
| bouaziz | 0:c0664cca9901 | 148 | |
| bouaziz | 0:c0664cca9901 | 149 | |
| bouaziz | 0:c0664cca9901 | 150 |