123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- #ifndef NETWORKBRIDGES_SOURCE
- #define NETWORKBRIDGES_SOURCE
- #include <memory.h>
- #include <errno.h>
- #include "../plc/plc.h"
- #include "../ether/channel.h"
- #include "../tools/types.h"
- #include "../tools/error.h"
- unsigned LocalDevices (struct channel const * channel, struct message * message, void * memory, size_t extent)
- {
- extern const byte localcast [ETHER_ADDR_LEN];
- struct vs_sw_ver_request
- {
- struct ethernet_hdr ethernet;
- struct qualcomm_hdr qualcomm;
- }
- * request = (struct vs_sw_ver_request *)(message);
- uint8_t * origin = (uint8_t *)(memory);
- uint8_t * offset = (uint8_t *)(memory);
- ssize_t packetsize;
- memset (memory, 0, extent);
- memset (message, 0, sizeof (* message));
- EthernetHeader (&request->ethernet, localcast, channel->host, channel->type);
- QualcommHeader (&request->qualcomm, 0, (VS_SW_VER | MMTYPE_REQ));
- if (sendpacket (channel, message, (ETHER_MIN_LEN - ETHER_CRC_LEN)) <= 0)
- {
- return (0);
- }
- while ((packetsize = readpacket (channel, message, sizeof (* message))) > 0)
- {
- if (UnwantedMessage (message, packetsize, 0, (VS_SW_VER | MMTYPE_CNF)))
- {
- continue;
- }
- if (extent >= sizeof (message->ethernet.OSA))
- {
- memcpy (offset, message->ethernet.OSA, sizeof (message->ethernet.OSA));
- offset += sizeof (message->ethernet.OSA);
- extent -= sizeof (message->ethernet.OSA);
- }
- }
- return ((unsigned)(offset - origin) / ETHER_ADDR_LEN);
- }
- #endif
|