X-Git-Url: https://git.ao2.it/libam7xxx.git/blobdiff_plain/c8837a57134230c335a85da22322fd794b19ff44..69c8952c3d754f6928f9628e6ce4d7de95fa846d:/src/am7xxx.c diff --git a/src/am7xxx.c b/src/am7xxx.c index 47e04bb..bc671f1 100644 --- a/src/am7xxx.c +++ b/src/am7xxx.c @@ -386,16 +386,17 @@ static int read_header(am7xxx_device *dev, struct am7xxx_header *h) unserialize_header(dev->buffer, h); - debug_dump_header(dev->ctx, h); - if (h->direction == AM7XXX_DIRECTION_IN) { ret = 0; } else { error(dev->ctx, - "Received a packet with direction AM7XXX_DIRECTION_OUT, weird!\n"); + "Expected an AM7XXX_DIRECTION_IN packet, got one with direction = %d. Weird!\n", + h->direction); ret = -EINVAL; } + debug_dump_header(dev->ctx, h); + out: return ret; } @@ -406,7 +407,13 @@ static int send_header(am7xxx_device *dev, struct am7xxx_header *h) debug_dump_header(dev->ctx, h); + /* For symmetry with read_header() we should check here for + * h->direction == AM7XXX_DIRECTION_OUT but we just ensure that in all + * the callers and save some cycles here. + */ + serialize_header(h, dev->buffer); + ret = send_data(dev, dev->buffer, AM7XXX_HEADER_WIRE_SIZE); if (ret < 0) error(dev->ctx, "failed to send data\n"); @@ -745,6 +752,13 @@ AM7XXX_PUBLIC int am7xxx_get_device_info(am7xxx_device *dev, if (ret < 0) return ret; + if (h.packet_type != AM7XXX_PACKET_TYPE_DEVINFO) { + error(dev->ctx, "expected packet type: %d, got %d instead!\n", + AM7XXX_PACKET_TYPE_DEVINFO, h.packet_type); + errno = ENOTSUP; + return -ENOTSUP; + } + device_info->native_width = h.header_data.devinfo.native_width; device_info->native_height = h.header_data.devinfo.native_height; #if 0