Untitled

 avatar
unknown
c_cpp
2 years ago
3.9 kB
4
Indexable
#include <stdio.h>
#include <stdlib.h>
#include "structs.h"
#include <string.h>

int opr_nr;
// char exit_code[4] = "exit\n";
int cmp(const void *a, const void *b) {
    sensor *sensorA = (sensor *)a;
    sensor *sensorB = (sensor *)b;
    if (sensorA->sensor_type == PMU && sensorB->sensor_type != PMU) {
        return -1;
    } else if (sensorA->sensor_type != PMU && sensorB->sensor_type == PMU) {
        return 1;
    } else {
        return 0;
    }
}

void PRINT(sensor *sensors, int index) {
    if (sensors[index].sensor_type == TIRE) {
        tire_sensor *Tire = (tire_sensor *)sensors[index].sensor_data;
        printf("Tire Sensor\n");
        printf("Pressure: %f\n", Tire->pressure);
        printf("Temperature: %f\n", Tire->temperature);
        printf("Wear Level: %d%%\n", Tire->wear_level);
        printf("Not Calculated\n");
    
    } else if (sensors[index].sensor_type == PMU) {
        power_management_unit *PowMU = (power_management_unit *)sensors[index].sensor_data;
        printf("Power Managment Unit\n");
        printf("Voltage: %.2f\n", PowMU->voltage);
        printf("Current: %.2f\n", PowMU->current);
        printf("Power Consumption: %.2f\n", PowMU->power_consumption);
        printf("Energy Regen: %d%%\n", PowMU->energy_regen);
        printf("Energy Storage: %d%%\n", PowMU->energy_storage);
    }
}

int main(int argc, char const *argv[]) {
    FILE *fptr = fopen(argv[1], "rb");
    int nr;
    fread(&nr, sizeof(int), 1, fptr);

    sensor *sensors = (sensor *)malloc(nr * sizeof(sensor));
    for (size_t i = 0; i < nr; i++) {
        fread(&sensors[i].sensor_type, sizeof(int), 1, fptr);
        if (sensors[i].sensor_type == TIRE)
        {
            tire_sensor *Tire = (tire_sensor *)malloc(sizeof(tire_sensor));
            sensors[i].sensor_data = (tire_sensor *)malloc(sizeof(tire_sensor));
            fread(&Tire->pressure, sizeof(float), 1, fptr);
            fread(&Tire->temperature, sizeof(float), 1, fptr);
            fread(&Tire->wear_level, sizeof(int), 1, fptr);
            fread(&Tire->performace_score, sizeof(int), 1, fptr);
            sensors[i].sensor_data = Tire;
        }
        else if (sensors[i].sensor_type == PMU)
        {
            power_management_unit *PowMU = (power_management_unit *)malloc(sizeof(power_management_unit));
            sensors[i].sensor_data = (power_management_unit *)malloc(sizeof(power_management_unit));
            fread(&PowMU->voltage, sizeof(float), 1, fptr);
            fread(&PowMU->current, sizeof(float), 1, fptr);
            fread(&PowMU->power_consumption, sizeof(float), 1, fptr);
            fread(&PowMU->energy_regen, sizeof(int), 1, fptr);
            fread(&PowMU->energy_storage, sizeof(int), 1, fptr);
            sensors[i].sensor_data = PowMU;
        }
        fread(&opr_nr, sizeof(int), 1, fptr);
        sensors[i].operations_idxs = malloc(opr_nr * sizeof(int));
        for (size_t i = 0; i < opr_nr; i++)
        {
            fread(&sensors->operations_idxs[i], sizeof(int), 1, fptr);
        }
    }
    qsort(sensors, nr, sizeof(sensors), cmp);
    fclose(fptr);
    // char string_c[20];
    // int size_string = sizeof(string_c);
    int VEC_INDEX = 0;
    char command[10];
    scanf("%s", command);
    while (strncmp(command, "exit\n", 4) != 0) {
        //scanf("%s", string_c);
        if (strcmp(command, "clear") == 0) {

        } else {
            scanf("%d", &VEC_INDEX);
            if (strcmp(command, "analyse") == 0) {
                printf("shya budet magic");
            } else if(strcmp(command, "print") == 0){
                if (VEC_INDEX < 0 || VEC_INDEX > nr) {
                    printf("Index out of range!\n");
                    continue;
                }
                PRINT(sensors, VEC_INDEX);
            }
        }
        scanf("%s", command);
    }

return 0;
}
Editor is loading...