//------------------------------------------------------------------------------ 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(); }
//------------------------------------------------------------------------------ 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++){