static int init(struct sr_input *in)
{
- int num_probes;
+ int num_probes, i;
+ char name[SR_MAX_PROBENAME_LEN];
if (in->param && in->param[0]) {
num_probes = strtoul(in->param, NULL, 10);
}
/* Create a virtual device. */
- in->vdevice = sr_device_new(NULL, 0, num_probes);
+ in->vdevice = sr_device_new(NULL, 0);
+
+ for (i = 0; i < num_probes; i++) {
+ snprintf(name, SR_MAX_PROBENAME_LEN, "%d", i);
+ sr_device_probe_add(in->vdevice, name); /* TODO: Check return value. */
+ }
return SR_OK;
}
{
struct sr_datafeed_header header;
struct sr_datafeed_packet packet;
+ struct sr_datafeed_logic logic;
uint8_t buf[PACKET_SIZE], divcount;
int i, fd, size, num_probes;
uint64_t samplerate;
/* Send header packet to the session bus. */
sr_dbg("la8input: %s: sending SR_DF_HEADER packet", __func__);
packet.type = SR_DF_HEADER;
- packet.length = sizeof(struct sr_datafeed_header);
- packet.unitsize = 0;
packet.payload = &header;
header.feed_version = 1;
gettimeofday(&header.starttime, NULL);
header.num_logic_probes = num_probes;
header.num_analog_probes = 0;
- header.protocol_id = SR_PROTO_RAW;
header.samplerate = samplerate;
sr_session_bus(in->vdevice, &packet);
/* Send data packets to the session bus. */
sr_dbg("la8input: %s: sending SR_DF_LOGIC data packets", __func__);
packet.type = SR_DF_LOGIC;
- packet.unitsize = (num_probes + 7) / 8;
- packet.payload = buf;
+ packet.payload = &logic;
+ logic.unitsize = (num_probes + 7) / 8;
+ logic.data = buf;
/* Send 8MB of total data to the session bus in small chunks. */
for (i = 0; i < NUM_PACKETS; i++) {
/* TODO: Handle errors, handle incomplete reads. */
size = read(fd, buf, PACKET_SIZE);
- packet.length = PACKET_SIZE;
+ logic.length = PACKET_SIZE;
sr_session_bus(in->vdevice, &packet);
}
close(fd); /* FIXME */
/* Send end packet to the session bus. */
sr_dbg("la8input: %s: sending SR_DF_END", __func__);
packet.type = SR_DF_END;
- packet.length = 0;
- packet.unitsize = 0;
packet.payload = NULL;
sr_session_bus(in->vdevice, &packet);