bunch of work on the interfaces

This commit is contained in:
2025-05-28 14:02:09 +02:00
parent f14474ebb7
commit 38425792b1
6 changed files with 165 additions and 19 deletions

View File

@@ -157,6 +157,8 @@ double nn_realTime();
double nn_realTimeClock(void *_);
/* Will busy-loop until the time passes. This is meant for computed latencies in components. */
void nn_busySleep(double t);
// calls nn_busySleep with a random latency
void nn_randomLatency(double min, double max);
typedef double nn_clock_t(void *_);
@@ -233,11 +235,11 @@ void nn_unlockComputer(nn_computer *computer);
int nn_getState(nn_computer *computer);
void nn_setState(nn_computer *computer, int state);
void nn_setEnergyInfo(nn_computer *computer, size_t energy, size_t capacity);
size_t nn_getEnergy(nn_computer *computer);
size_t nn_getMaxEnergy(nn_computer *computer);
void nn_removeEnergy(nn_computer *computer, size_t energy);
void nn_addEnergy(nn_computer *computer, size_t amount);
void nn_setEnergyInfo(nn_computer *computer, double energy, double capacity);
double nn_getEnergy(nn_computer *computer);
double nn_getMaxEnergy(nn_computer *computer);
void nn_removeEnergy(nn_computer *computer, double energy);
void nn_addEnergy(nn_computer *computer, double amount);
double nn_getTemperature(nn_computer *computer);
double nn_getThermalCoefficient(nn_computer *computer);
@@ -349,11 +351,30 @@ void nn_loadFilesystemTable(nn_universe *universe);
// the helpers
// EEPROM
typedef struct nn_eepromControl {
double readLatency;
double writeLatency;
double readEnergyCost;
double writeEnergyCost;
double writeHeatCost;
double randomLatencyMin;
double randomLatencyMax;
// Call costs
size_t readCost;
size_t writeCost;
} nn_eepromControl;
typedef struct nn_eeprom {
nn_refc refc;
void *userdata;
void (*deinit)(nn_component *component, void *userdata);
nn_eepromControl (*control)(nn_component *component, void *userdata);
// methods
size_t (*getSize)(nn_component *component, void *userdata);
size_t (*getDataSize)(nn_component *component, void *userdata);
@@ -389,19 +410,47 @@ typedef struct nn_filesystemControl {
// thermals
double motorHeat; // this times how many chunks have been seeked will be the heat addres, +/- the heat range.
double heatRange;
// call budget
size_t readCostPerChunk;
size_t writeCostPerChunk;
size_t seekCostPerChunk;
} nn_filesystemControl;
typedef struct nn_filesystem {
nn_refc refc;
nn_filesystemControl *control;
void *userdata;
void (*deinit)(nn_component *component, void *userdata);
nn_filesystemControl (*control)(nn_component *component, void *userdata);
void (*getLabel)(nn_component *component, void *userdata, char *buf, size_t *buflen);
size_t (*setLabel)(nn_component *component, void *userdata, const char *buf, size_t buflen);
size_t (*spaceUsed)(nn_component *component, void *userdata);
size_t (*spaceTotal)(nn_component *component, void *userdata);
bool (*isReadOnly)(nn_component *component, void *userdata);
// general operations
size_t (*size)(nn_component *component, void *userdata, const char *path);
bool (*remove)(nn_component *component, void *userdata, const char *path);
size_t (*lastModified)(nn_component *component, void *userdata, const char *path);
bool (*rename)(nn_component *component, void *userdata, const char *from, const char *to);
bool (*exists)(nn_component *component, void *userdata, const char *path);
// directory operations
bool (*isDirectory)(nn_component *component, void *userdata, const char *path);
bool (*makeDirectory)(nn_component *component, void *userdata, const char *path);
// the length and array must be nn_alloc'd.
// The strings must be NULL-terminated and also nn_alloc'd.
// See nn_strdup().
char **(*list)(nn_component *component, void *userdata, const char *path, size_t *len);
// file operations
size_t (*open)(nn_component *component, void *userdata, const char *path, const char *mode);
void (*close)(nn_component *component, void *userdata, int fd);
size_t (*seek)(nn_component *component, void *userdata, int fd, int whence, int off);
size_t (*read)(nn_component *component, void *userdata, int fd, char *buf, size_t required);
bool (*write)(nn_component *component, void *userdata, int fd, char *buf, size_t len);
} nn_filesystem;
nn_filesystem *nn_volatileFileSystem(size_t capacity, nn_filesystemControl *control);
@@ -412,22 +461,32 @@ typedef struct nn_driveControl {
// Set it to 0 to disable seek latency.
int rpm;
double readLatencyPerByte;
double writeLatencyPerByte;
double readLatencyPerSector;
double writeLatencyPerSector;
double randomLatencyMin;
double randomLatencyMax;
double motorHeat;
double heatRange;
// These are per sector
double motorEnergyCost;
double readEnergyCost;
double writeEnergyCost;
// call budget
size_t readCostPerChunk;
size_t writeCostPerChunk;
size_t seekCostPerChunk;
} nn_driveControl;
typedef struct nn_drive {
nn_refc refc;
nn_driveControl *control;
void *userdata;
void (*deinit)(nn_component *component, void *userdata);
nn_driveControl (*control)(nn_component *component, void *userdata);
void (*getLabel)(nn_component *component, void *userdata, char *buf, size_t *buflen);
size_t (*setLabel)(nn_component *component, void *userdata, const char *buf, size_t buflen);