mirror of
https://github.com/NeoFlock/neonucleus.git
synced 2025-09-24 09:03:32 +02:00
work on modems
This commit is contained in:
parent
8531b1a05e
commit
db28d03f3c
@ -1,5 +1,7 @@
|
||||
#include "../neonucleus.h"
|
||||
|
||||
// TODO: finish
|
||||
|
||||
// Data structures
|
||||
|
||||
typedef struct nn_vfnode {
|
||||
|
@ -523,3 +523,19 @@ nn_value nn_return_table(nn_computer *computer, nn_size_t len) {
|
||||
nn_return(computer, val);
|
||||
return val;
|
||||
}
|
||||
|
||||
const char *nn_pushNetworkMessage(nn_computer *computer, nn_address receiver, nn_address sender, nn_size_t port, double distance, nn_value *values, nn_size_t valueLen) {
|
||||
nn_Alloc *alloc = &computer->universe->ctx.allocator;
|
||||
|
||||
nn_value buffer[valueLen + 5];
|
||||
buffer[0] = nn_values_cstring("modem_message");
|
||||
buffer[1] = nn_values_string(alloc, receiver, nn_strlen(receiver));
|
||||
buffer[2] = nn_values_string(alloc, sender, nn_strlen(sender));
|
||||
buffer[3] = nn_values_integer(port);
|
||||
buffer[4] = nn_values_number(distance);
|
||||
for(nn_size_t i = 0; i < valueLen; i++) {
|
||||
buffer[i + 5] = nn_values_retain(values[i]);
|
||||
}
|
||||
|
||||
return nn_pushSignal(computer, buffer, valueLen + 5);
|
||||
}
|
||||
|
@ -118,6 +118,9 @@ extern "C" {
|
||||
#define NN_MAX_OPEN_FILES 128
|
||||
#define NN_MAX_SCREEN_KEYBOARDS 64
|
||||
#define NN_MAX_PATH 256
|
||||
#define NN_PORT_MAX 65535
|
||||
#define NN_MAX_WAKEUPMSG 2048
|
||||
#define NN_TUNNEL_PORT 0
|
||||
|
||||
#define NN_OVERHEAT_MIN 100
|
||||
#define NN_CALL_HEAT 0.05
|
||||
@ -549,6 +552,7 @@ nn_value nn_return_table(nn_computer *computer, nn_size_t len);
|
||||
nn_size_t nn_values_getType(nn_value val);
|
||||
nn_value nn_values_retain(nn_value val);
|
||||
void nn_values_drop(nn_value val);
|
||||
void nn_values_dropAll(nn_value *values, nn_size_t len);
|
||||
|
||||
void nn_values_set(nn_value arr, nn_size_t idx, nn_value val);
|
||||
nn_value nn_values_get(nn_value arr, nn_size_t idx);
|
||||
@ -859,6 +863,56 @@ typedef struct nn_gpuControl {
|
||||
// the control is COPIED.
|
||||
nn_component *nn_addGPU(nn_computer *computer, nn_address address, int slot, nn_gpuControl *control);
|
||||
|
||||
typedef struct nn_networkControl {
|
||||
double packetBytesPerTick;
|
||||
double heatPerFullPacket;
|
||||
double energyPerFullPacket;
|
||||
} nn_networkControl;
|
||||
|
||||
// NULL on success, error string on failure
|
||||
const char *nn_pushNetworkMessage(nn_computer *computer, nn_address receiver, nn_address sender, nn_size_t port, double distance, nn_value *values, nn_size_t valueLen);
|
||||
|
||||
typedef struct nn_modemTable {
|
||||
void *userdata;
|
||||
void (*deinit)(void *userdata);
|
||||
|
||||
nn_networkControl control;
|
||||
|
||||
// basic limits
|
||||
|
||||
nn_bool_t wireless;
|
||||
nn_size_t maxValues;
|
||||
nn_size_t maxPacketSize;
|
||||
|
||||
// ports
|
||||
|
||||
nn_bool_t (*isOpen)(void *userdata, nn_size_t port);
|
||||
nn_bool_t (*open)(void *userdata, nn_size_t port);
|
||||
// port 0 means close all
|
||||
nn_bool_t (*close)(void *userdata, nn_size_t port);
|
||||
|
||||
// messages
|
||||
|
||||
// Address is NULL if broadcasting
|
||||
nn_bool_t (*send)(void *userdata, nn_address address, nn_size_t port, nn_value *values, nn_size_t valueCount);
|
||||
|
||||
// signal strength
|
||||
nn_size_t maxStrength;
|
||||
nn_size_t (*getStrength)(void *userdata);
|
||||
nn_bool_t (*setStrength)(void *userdata, nn_size_t strength);
|
||||
|
||||
// wake message
|
||||
void (*getWakeMessage)(void *userdata, char *buf, nn_size_t *buflen);
|
||||
nn_size_t (*setWakeMessage)(void *userdata, const char *buf, nn_size_t buflen, nn_bool_t fuzzy);
|
||||
} nn_modemTable;
|
||||
|
||||
typedef struct nn_tunnelTable {
|
||||
void *userdata;
|
||||
void (*deinit)(void *userdata);
|
||||
|
||||
nn_networkControl control;
|
||||
} nn_tunnelTable;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@ -129,6 +129,12 @@ void nn_values_drop(nn_value val) {
|
||||
}
|
||||
}
|
||||
|
||||
void nn_values_dropAll(nn_value *values, nn_size_t len) {
|
||||
for(nn_size_t i = 0; i < len; i++) {
|
||||
nn_values_drop(values[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void nn_values_set(nn_value arr, nn_size_t idx, nn_value val) {
|
||||
if(arr.tag != NN_VALUE_ARRAY) return;
|
||||
if(idx >= arr.array->len) return;
|
||||
|
Loading…
x
Reference in New Issue
Block a user