diff --git a/src/communicatie.h b/src/communicatie.h index 2d8e729..930d374 100644 --- a/src/communicatie.h +++ b/src/communicatie.h @@ -11,61 +11,58 @@ typedef enum { } packetID_t; // packet structures -union { - struct { - packetID_t id = PACKET_NOODSTOP; - bool overheeat; - bool overload; - bool overspeed; - } initAandrijving; - - struct { - packetID_t id = PACKET_INITPARAMS; - uint8_t maxVermogen; - uint16_t maxSnelhied; - uint8_t maxTemptratuur; - uint8_t vermogenSetpoint; - } initBelasting; - - struct { - packetID_t id = 0x03; - uint8_t maxVermogen; - uint16_t maxSnelhied; - uint8_t maxTemptratuur; - } maxWaardesBelasting; - - struct { - packetID_t id = 0x04; - uint8_t rendement; - uint16_t snelheid; - uint16_t stroom; - uint16_t spanning; - }; - - struct { - packetID_t id = 0x05; - uint16_t snelheidSetpoint; - uint16_t maxSpanning; - uint16_t maxStroom; - } initAandrijving; - - struct { - packetID_t id = 0x06; - uint8_t rendement; - uint8_t vermogen; - uint16_t stroom; - uint16_t spanning; - }; -} I2CPacket_t; +typedef struct { + packetID_t id; + bool overheeat; + bool overload; + bool overspeed; +} initAandrijving; typedef struct { - uint8_t maxTemperatuur; + packetID_t id; uint8_t maxVermogen; - uint16_t maxSnelheid; -} maxwaardes_t; + uint16_t maxSnelhied; + uint8_t maxTemptratuur; + uint8_t vermogenSetpoint; +} initBelasting; -mqd_t MaxWaardes_mq; +typedef struct { + packetID_t id; + uint8_t maxVermogen; + uint16_t maxSnelhied; + uint8_t maxTemptratuur; +} maxWaardesBelasting; -extern void mppt_setpoint(uint8_t vermogen); +typedef struct { + packetID_t id; + uint8_t rendement; + uint16_t snelheid; + uint16_t stroom; + uint16_t spanning; +} dataBelasting; + +typedef struct { + packetID_t id; + uint16_t snelheidSetpoint; + uint16_t maxSpanning; + uint16_t maxStroom; +} initAandrijving; + +typedef struct { + packetID_t id; + uint8_t rendement; + uint8_t vermogen; + uint16_t stroom; + uint16_t spanning; +} dataAandrijving; + +union { + initAandrijving; + initBelasting; + maxWaardesBelasting; + dataBelasting; + initAandrijving; + dataAandrijving; +} I2CPacket_t; #endif \ No newline at end of file diff --git a/src/communicatieBeheer.c b/src/communicatieBeheer.c index dfd2f85..ec7ddaa 100644 --- a/src/communicatieBeheer.c +++ b/src/communicatieBeheer.c @@ -1,102 +1,97 @@ -#include +#include #include "communicatie.h" -#define COMM_I2C_ADDRESS 0xB1 +#define SPI_PACKET_LENGTH 4 extern pthread_t createSimplePTread(int prio, void * fn); -union I2CPacket_t PacketBuffer; +unsigned char ReciveBuffer[SPI_PACKET_LENGTH]; +unsigned char TransmitBuffer[SPI_PACKET_LENGTH]; -void dataBijhouden(){ - //BLOCK: wacht op werken - //?? +uint16_t comm_snelheid; - while(1){ - //BLOCK: vermogen DUT aflezen - //?? +typedef enum { + SPIPARM_maxVermogen, + SPIPARM_maxSnelheid, + SPIPARM_maxTempratuur, + SPIPARM_setpoint, + SPIPARM_vermogen, + SPIPARM_snelheid, + SPIPARM_tempratuur, + SPIPARM_count +} SPI_Register_t; - //BLOCK: Snelheid aflezen - //?? - - //BLOCK: bereken koppel - //?? - - //BLOCK: Vermogen belasting aflezen - //?? - - //BLOCK: Spanning belasting aflezen - //?? - - //BLOCK: bereken rendement - //?? - - //BLOCK: Temperatuur aflezen - //?? - - //BLOCK: sleep 1ms - usleep(1000); - } -} - -// communicatie I2C Taak -void comm_i2c(){ - - //BLOCK: init start begint - //?? - - //BLOCK: Initialiseer I2C - I2C_init(); - //TODO: findout corect driver for this - Slave_Handle handle; - I2CSlave_Params params; - I2CSlave_Params_init(¶ms); - params.transferMode = I2CSLAVE_MODE_BLOCKING; - params.slaveAddress = COMM_I2C_ADDRESS; - handle = I2CSlave_open(CONFIG_I2C_0, ¶ms); - if (!handle) { - System_printf("I2CSlave did not open"); +// communicatie spi Taak +void comm_spi(){ + // Initialiseer SPI + ISP_init(); + SPI_Params spiParams; + SPI_Params_init(&spiParams); + spiParams.frameFormat = SPI_POL0_PHA0; // mode0 + spiParams.bitRate = 1E6; // 1 MHz + SPI_Handle masterSpi = SPI_open(CONFIG_SPI_MASTER, &spiParams); + if (masterSpi == NULL) { + // Display_printf(display, 0, 0, "Error initializing master SPI\n"); + while (1); + } else { + // Display_printf(display, 0, 0, "Master SPI initialized\n"); } - //BLOCK: GPIO init - //?? - - //BLOCK: maak thread aan om waardes te updaten - createSimplePTread(1, &dataBijhouden); - - I2CPacket_t packet; + // create transaction + SPI_Transaction transaction; + transaction.count = SPI_PACKET_LENGTH; + transaction.txBuf = (void *) TransmitBuffer; + transaction.rxBuf = (void *) ReciveBuffer; + // start the loop + TransmitBuffer[0] = 0; while(1){ - //BLOCK: read package - //TODO: figgerout how it actualy works - I2C_read(handle, &packet, sizeof(Packet)); + // zero the buffers + memset((void *) TransmitBuffer+1, 0, SPI_PACKET_LENGTH-1); + memset((void *) ReciveBuffer, 0, SPI_PACKET_LENGTH); - //BLOCK: send reply - //TODO: figgerout how it actualy works - I2C_send(handle, &PacketBuffer, sizeof(PacketBuffer)); - - //BLOCK: identificeer package - switch (packet){ - case PACKET_UPDATEBELASTING: - //BLOCK: Update setpoint - mppt_setpoint(packet.vermogenSetpoint); + // set data in the transmit buffer + ReciveBuffer[0] = TransmitBuffer[0]; + switch(TransmitBuffer[0]){ + case SPIPARM_vermogen: + TransmitBuffer[1] = mppt_getVermogen(); break; - - case PACKET_NOODSTOP: - //BLOCK: Update Overheat, Overspeed, overload waardes updaten - //?? + case SPIPARM_snelheid: + TransmitBuffer[1] = comm_snelheid; break; - - case PACKET_INITPARAMS: - //BLOCK: Verstuur data naar noodstop - maxwaardes_t p; - p.maxTemperatuur = packet.maxTemperatuur; - p.maxVermogen = packet.maxVermogen; - p.maxSnelheid = packet.maxSnelheid; - //mq_send(MaxWaardes_mq, (const char*)&p, sizeof(p), 3); - - //BLOCK: Verstuur data naar MPPT - mppt_setpoint(packet.vermogenSetpoint); + case SPIPARM_tempratuur: + TransmitBuffer[1] = noodstop_getTemptatuur(); break; } + + // do the transaction + SPI_transaction(masterSpi, &transaction); + + // read the data out the recive buffer + switch (ReciveBuffer[0]){ + case SPIPARM_maxVermogen: + uint8_t *maxVermogen = &ReciveBuffer[1]; + noodstop_setMaxVermogen(*maxVermogen); + break; + case SPIPARM_maxSnelheid: + uint16_t *maxSnelheid = &ReciveBuffer[1]; + noodstop_setMaxSnelheid(*maxSnelheid); + break; + case SPIPARM_maxTempratuur: + uint8_t *maxTemptratuur = &ReciveBuffer[1]; + noodstop_setMaxTemptratuur(*maxTemptratuur); + break; + case SPIPARM_setpoint: + uint8_t *setpoint = &ReciveBuffer[1]; + mppt_setpoint(*setpoint); + break; + } + + // increment and loop parameter + TransmitBuffer[0]++; + if(TransmitBuffer[0] == SPIPARM_count) + TransmitBuffer[0] = 0; + + usleep(5000); }