X-Git-Url: https://git.ao2.it/libam7xxx.git/blobdiff_plain/aa90a67cf7535314168f86ec8bf39bf91a36c620..8116c40f687d89cbcd521e2268a3a084b9280dfe:/src/am7xxx.h diff --git a/src/am7xxx.h b/src/am7xxx.h index 7330925..b6a2a9a 100644 --- a/src/am7xxx.h +++ b/src/am7xxx.h @@ -4,7 +4,7 @@ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or + * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, @@ -19,79 +19,61 @@ #ifndef __AM7XXX_H #define __AM7XXX_H -#include -#include - #ifdef __cplusplus extern "C" { #endif -typedef libusb_device_handle *am7xxx_device; -typedef enum { - AM7XXX_PACKET_TYPE_INIT = 0x01, - AM7XXX_PACKET_TYPE_IMAGE = 0x02, - AM7XXX_PACKET_TYPE_POWER = 0x04, - AM7XXX_PACKET_TYPE_UNKNOWN = 0x05, -} am7xxx_packet_type; +struct _am7xxx_context; +typedef struct _am7xxx_context am7xxx_context; + +struct _am7xxx_device; +typedef struct _am7xxx_device am7xxx_device; typedef enum { AM7XXX_IMAGE_FORMAT_JPEG = 1, + AM7XXX_IMAGE_FORMAT_NV12 = 2, } am7xxx_image_format; typedef enum { - AM7XXX_POWER_OFF = 0, - AM7XXX_POWER_LOW = 1, - AM7XXX_POWER_MID = 2, - AM7XXX_POWER_HIGH = 3, + AM7XXX_POWER_OFF = 0, + AM7XXX_POWER_LOW = 1, + AM7XXX_POWER_MIDDLE = 2, + AM7XXX_POWER_HIGH = 3, + AM7XXX_POWER_TURBO = 4, } am7xxx_power_mode; -struct am7xxx_image_header { - uint32_t format; - uint32_t width; - uint32_t height; - uint32_t image_size; -}; +int am7xxx_init(am7xxx_context **ctx); -struct am7xxx_power_header { - uint32_t power_low; - uint32_t power_mid; - uint32_t power_high; -}; - -/* - * Examples of packet headers: - * - * Image header: - * 02 00 00 00 00 10 3e 10 01 00 00 00 20 03 00 00 e0 01 00 00 53 E8 00 00 - * - * Power header: - * 04 00 00 00 00 0c ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - */ +void am7xxx_shutdown(am7xxx_context *ctx); -struct am7xxx_header { - uint32_t packet_type; - uint8_t unknown0; - uint8_t header_data_len; - uint8_t unknown2; - uint8_t unknown3; - union { - struct am7xxx_image_header image; - struct am7xxx_power_header power; - } header_data; -}; +int am7xxx_open_device(am7xxx_context *ctx, + am7xxx_device **dev, + unsigned int device_index); -am7xxx_device am7xxx_init(void); +int am7xxx_close_device(am7xxx_device *dev); -void am7xxx_shutdown(am7xxx_device dev); +int am7xxx_get_device_info(am7xxx_device *dev, + unsigned int *native_width, + unsigned int *native_height, + unsigned int *unknown0, + unsigned int *unknown1); -int am7xxx_send_image(am7xxx_device dev, +int am7xxx_send_image(am7xxx_device *dev, am7xxx_image_format format, unsigned int width, unsigned int height, - uint8_t *image, + unsigned char *image, unsigned int size); +/* + * NOTE: if we set the mode to AM7XXX_POWER_OFF we can't turn the + * display on again by using only am7xxx_set_power_mode(). + * + * Remember to mention that when writing the API doc. + */ +int am7xxx_set_power_mode(am7xxx_device *dev, am7xxx_power_mode mode); + #ifdef __cplusplus } #endif