Пример #1
0
//------------------------------------------------------------------------------
void writeRegister(byte cs, byte device, byte reg, byte data)
{
	byte buffer[3] = {0,0,0};
	byte crc =0;
	//int i;

	unsigned int temp = 0;
	buffer[2] = 0x01 | (device << 1);
	buffer[1] = reg;
	buffer[0] = data;
	crc = calculCRC(buffer,3);
	//calcul CRC et ajoute à la fin

	temp |= (buffer[2]<<24) | (buffer[1]<<16) | (buffer[0]<<8) | crc;

	toggleSPI_CS();
	sendByteSPI(buffer[2]);
	getByteSPI();
	sendByteSPI(buffer[1]);
	getByteSPI();
	sendByteSPI(buffer[0]);
	getByteSPI();
	sendByteSPI(crc);
	getByteSPI();
	toggleSPI_CS();
}
Пример #2
0
//------------------------------------------------------------------------------
char readRegister(byte cs, byte device, byte startReg, byte length, byte *data)
{
	unsigned int temp = 0;

	if(length <= BUFFER_LENGTH -3)
	{
		byte buffer[BUFFER_LENGTH] = {0};
		//byte bufferRX[BUFFER_LENGTH] = {0};
		byte crcReceive = {0};
		byte crcCalculated = {0};
		int j = 0;
		buffer[length+2] = 0x00 | (device << 1);
		buffer[length+1] = startReg;
		buffer[length] = length;
		
		
		temp |= (buffer[length+2]<<24) | (buffer[length+1]<<16) | (buffer[length]<<8);
		
		toggleSPI_CS(); // Non blocant

		sendByteSPI(buffer[length+2]);
		getByteSPI();
		sendByteSPI( buffer[length+1]);
		getByteSPI();
		sendByteSPI( buffer[length]);
		getByteSPI();

                for(j = 0; j < length; j++)
                {
                    sendByteSPI( 0xFF);
                    buffer[length-j-1] = getByteSPI();
                    data[length-j-1] = buffer[length-j-1];
                }

		
		sendByteSPI(0xFF);
		crcReceive = getByteSPI();
		toggleSPI_CS();	//SPI_CS = 0; Non blocant
		crcCalculated = calculCRC(buffer,length+3);
		if(crcReceive == crcCalculated)
                    return 1;
                return 0;
	}

    return 0;
}
	sendHMI(messageHMI);
}
#endif
#ifdef SLAVEMODE
void delayRequest(void){
	Type type=DELAYREQUEST;

	readClock(&timeProt.tx);
	//pc.printf("timeCounter:%ld\r\n",RTC->MODE0.COUNT.bit.COUNT);
	send(type,0,NULL);

	
	sendHMI("	delay request send");
}
#endif
void send(const Type type,const uint8_t length,const uint8_t* data){
		uint8_t i;
		uint8_t j=0;
		uint8_t send[length+4];//to complete
	sendHMI(messageHMI);
}
#endif
#ifdef SLAVEMODE
void delayRequest(void){
	Type type=DELAYREQUEST;

	readClock(&timeProt.tx);
	//pc.printf("timeCounter:%ld\r\n",RTC->MODE0.COUNT.bit.COUNT);
	send(type,0,NULL);

	
	sendHMI("	delay request send");
}
#endif
void send(const Type type,const uint8_t length,const uint8_t* data){
		uint8_t i;
		uint8_t j=0;
		uint8_t send[length+4];//to complete
		send[0]=HEADER;
		send[1]=IDDEVICE;	
		send[2]=type;
		if(length!=0){
			send[3]=length;//length data
			j=1;
		}
		for(i=0;i<length;i++){
			send[3+i+j]=data[i];
		}
		send[3+i+j]=calculCRC(type,length,data);

		ChannelRadio* radio = ChannelRadio::GetChannel();
		//uint8_t buffer[300] ;
		//uint8_t size=CLP_GeneratePacket( buffer, send,length+4+j);
		//for(i=0;i<size;i++){			
			//radio->putc(buffer[i]);
	//	}	
	
		uint8_t packet[CLP_UTILITY_MAX_PACKET_SIZE];

		/*hmi.printf("length %d\r\n",length+4+j );
		for(i=0;i<length+4+j;i++){