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"
|
#include "../neonucleus.h"
|
||||||
|
|
||||||
|
// TODO: finish
|
||||||
|
|
||||||
// Data structures
|
// Data structures
|
||||||
|
|
||||||
typedef struct nn_vfnode {
|
typedef struct nn_vfnode {
|
||||||
|
@ -523,3 +523,19 @@ nn_value nn_return_table(nn_computer *computer, nn_size_t len) {
|
|||||||
nn_return(computer, val);
|
nn_return(computer, val);
|
||||||
return 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_OPEN_FILES 128
|
||||||
#define NN_MAX_SCREEN_KEYBOARDS 64
|
#define NN_MAX_SCREEN_KEYBOARDS 64
|
||||||
#define NN_MAX_PATH 256
|
#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_OVERHEAT_MIN 100
|
||||||
#define NN_CALL_HEAT 0.05
|
#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_size_t nn_values_getType(nn_value val);
|
||||||
nn_value nn_values_retain(nn_value val);
|
nn_value nn_values_retain(nn_value val);
|
||||||
void nn_values_drop(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);
|
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);
|
nn_value nn_values_get(nn_value arr, nn_size_t idx);
|
||||||
@ -859,6 +863,56 @@ typedef struct nn_gpuControl {
|
|||||||
// the control is COPIED.
|
// the control is COPIED.
|
||||||
nn_component *nn_addGPU(nn_computer *computer, nn_address address, int slot, nn_gpuControl *control);
|
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
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#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) {
|
void nn_values_set(nn_value arr, nn_size_t idx, nn_value val) {
|
||||||
if(arr.tag != NN_VALUE_ARRAY) return;
|
if(arr.tag != NN_VALUE_ARRAY) return;
|
||||||
if(idx >= arr.array->len) return;
|
if(idx >= arr.array->len) return;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user