1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
unsigned char data1[8*3]; // les deux buffer
unsigned char data2[8*3];
unsigned char zz=0x00;
unsigned char wbuffer[8]={zz,zz,zz,zz,zz,zz,zz,zz}; // pour la fonction de la lecture SPI
int far *semID1; // semaphore for protecting data1 , et data2
int far *semID2;
// variable pour l'échange
int Current = 0 ; // variables d'echange cote EVNOI TCP
void* Buffers[2] ;
int Semaphores[2] ;
int _Current = 0 ; //variables d'echange coté SPI
void* _Buffers[2] ;
int _Semaphores[2] ;
short cSocket::Send(USHORT bufLen)
{ Buffers[Current]=data1; //recupere buffer et semaphore
Semaphores[Current]=semID1 ;
Buffers[1-Current] = data2;
Semaphores[1-Current] =semID2;
RTX_Reserve_Sem(Semaphores[Current],0);
send ( sd, Buffers[Current], bufLen, MSG_DONTWAIT, &error );
RTX_Free_Sem(Semaphores[Current]);
current=1-current; //echange de semaphore et buffer.
}
void huge Config_SPI_HW::ReadWriteBlock()
{
spi_waiton_sem_setmode_dyn(SPI_MODE, div); //pour synchroniser les esclaves SPI.
_Buffers[_Current]=data1; //recupere buffer et semaphore
_Semaphores[_Current]=semID1 ;
_Buffers[1-_Current] = data2;
_Semaphores[1-_Current] =semID2;
RTX_Reserve_Sem(Semaphores[Current],0);
//Lecture SPI
while(1)
{ for (i=0;i<8;i++)
{
spi_read_write_dyn(_Buffers[_Current]+i,wbuffer+i,1);
//Introduction de retard
while(ctr-->0);
ctr = 2;
}
}
RTX_Free_Sem(_Semaphores[_Current]); //liberer la semaphore
_Current =1-_Current; //echange de buffer semaphore
spi_release_sem(); // liberer le bus SPI
}
main()
{
// debut de code
while(1)
{
if(connected)
{ Send(8*3);
}
else
{
// ecoute et réinitialisation de la connection
}
} |