Echelon ISI Manuale Utente Pagina 78

  • Scaricare
  • Aggiungi ai miei manuali
  • Stampa
  • Pagina
    / 159
  • Indice
  • SEGNALIBRI
  • Valutato. / 5. Basato su recensioni clienti
Vedere la pagina 77
ISI Programmer’s Guide 76
deleted devices, monitor the time of the last update for each entry in the table
and detect devices that have not recently sent a DRUM.
E
XAMPLE 1
The following example maintains a device table, adding new devices when
discovered, updating subnet and node IDs when they change, and deleting
stale devices.
#include <isi.h>
#include <mem.h>
#define MAX_DEVICES 16
#define MAX_CREDITS 5
#pragma num_alias_table_entries 6
unsigned deviceCount;
// Struct to hold device information
typedef struct {
unsigned credits;
unsigned subnetId;
unsigned nodeId;
unsigned neuronId[NEURON_ID_LEN];
} Device;
Device devices[MAX_DEVICES];
when (reset) {
deviceCount = 0; // Not required since global RAM is zeroed
scaled_delay(31745UL); // 800ms delay
IsiStartS(isiFlagNone);
}
void MaintainDevices(const IsiDrum* pDrum) {
unsigned i;
// Iterate through the device list and see if the Neuron ID
// of the stored device matches that of the new device; if it
// does, then update the related details
for (i = 0; i < deviceCount; i++) {
if (memcmp(Devices[i].neuronId, pDrum->NeuronId,
NEURON_ID_LEN) == 0) {
devices[i].credits = MAX_CREDITS;
devices[i].subnetId = pDrum->SubnetId;
devices[i].nodeId = pDrum->NodeId;
break;
}
}
// If i is equal to the device count, then the device was not
// found, so add it to the device table if possible
if (i == deviceCount && deviceCount < MAX_DEVICES) {
memcpy(devices[i].neuronId, pDrum->NeuronId,
NEURON_ID_LEN);
deviceCount++;
devices[i].credits = MAX_CREDITS;
devices[i].subnetId = pDrum->SubnetId;
devices[i].nodeId = pDrum->NodeId;
}
}
Vedere la pagina 77
1 2 ... 73 74 75 76 77 78 79 80 81 82 83 ... 158 159

Commenti su questo manuale

Nessun commento