X-Git-Url: https://git.ao2.it/libam7xxx.git/blobdiff_plain/5c561b0a7b697114765dbb54442a99b4195439de..0a0245dfbfc15f619ab1cc23d1f7ff76ecc2fcd6:/src/am7xxx.h diff --git a/src/am7xxx.h b/src/am7xxx.h index e67ec9f..6847796 100644 --- a/src/am7xxx.h +++ b/src/am7xxx.h @@ -1,10 +1,10 @@ /* am7xxx - communication with AM7XXX based USB Pico Projectors and DPFs * - * Copyright (C) 2011 Antonio Ospite + * Copyright (C) 2012 Antonio Ospite * * 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, @@ -37,15 +37,24 @@ typedef enum { 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_generic_header { + uint32_t field0; + uint32_t field1; + uint32_t field2; + uint32_t field3; +}; + struct am7xxx_image_header { uint32_t format; uint32_t width; @@ -54,9 +63,9 @@ struct am7xxx_image_header { }; struct am7xxx_power_header { - uint32_t power_low; - uint32_t power_mid; - uint32_t power_high; + uint32_t bit2; + uint32_t bit1; + uint32_t bit0; }; /* @@ -69,19 +78,27 @@ struct am7xxx_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 */ +/* The header size on the wire is known to be always 24 bytes, regardless of + * the memory configuration enforced by different architechtures or compilers + * for struct am7xxx_header + */ +#define AM7XXX_HEADER_WIRE_SIZE 24 + struct am7xxx_header { uint32_t packet_type; uint8_t unknown0; - uint8_t header_len; + uint8_t header_data_len; uint8_t unknown2; uint8_t unknown3; union { + struct am7xxx_generic_header data; struct am7xxx_image_header image; struct am7xxx_power_header power; } header_data; }; am7xxx_device am7xxx_init(void); + void am7xxx_shutdown(am7xxx_device dev); int am7xxx_send_image(am7xxx_device dev, @@ -91,6 +108,14 @@ int am7xxx_send_image(am7xxx_device dev, uint8_t *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