README.asciidoc: add Aiptek PocketCinema T25 to the AM7XXX devices list
[libam7xxx.git] / src / am7xxx.c
index 1035e23..aaab4f4 100644 (file)
 #  define  __attribute__(x)  /*NOTHING*/
 #endif
 
 #  define  __attribute__(x)  /*NOTHING*/
 #endif
 
+/* Control shared library symbols visibility */
+#if defined _WIN32 || defined __CYGWIN__
+       #define AM7XXX_PUBLIC __declspec(dllexport)
+       #define AM7XXX_LOCAL
+#else
+       #if __GNUC__ >= 4
+               #define AM7XXX_PUBLIC __attribute__ ((visibility ("default")))
+               #define AM7XXX_LOCAL  __attribute__ ((visibility ("hidden")))
+       #else
+               #define AM7XXX_PUBLIC
+               #define AM7XXX_LOCAL
+       #endif
+#endif
+
 static void log_message(am7xxx_context *ctx,
                        int level,
                        const char *function,
 static void log_message(am7xxx_context *ctx,
                        int level,
                        const char *function,
@@ -63,6 +77,16 @@ static struct am7xxx_usb_device_descriptor supported_devices[] = {
                .product_id = 0xc101,
        },
        {
                .product_id = 0xc101,
        },
        {
+               .name       = "Acer C112",
+               .vendor_id  = 0x1de1,
+               .product_id = 0x5501,
+       },
+       {
+               .name       ="Aiptek PocketCinema T25",
+               .vendor_id  = 0x08ca,
+               .product_id = 0x2144,
+       },
+       {
                .name       = "Philips/Sagemcom PicoPix 1020",
                .vendor_id  = 0x21e7,
                .product_id = 0x000e,
                .name       = "Philips/Sagemcom PicoPix 1020",
                .vendor_id  = 0x21e7,
                .product_id = 0x000e,
@@ -280,7 +304,7 @@ static int send_data(am7xxx_device *dev, uint8_t *buffer, unsigned int len)
 
        trace_dump_buffer(dev->ctx, "sending -->", buffer, len);
 
 
        trace_dump_buffer(dev->ctx, "sending -->", buffer, len);
 
-       ret = libusb_bulk_transfer(dev->usb_device, 1, buffer, len, &transferred, 0);
+       ret = libusb_bulk_transfer(dev->usb_device, 0x1, buffer, len, &transferred, 0);
        if (ret != 0 || (unsigned int)transferred != len) {
                error(dev->ctx, "ret: %d\ttransferred: %d (expected %u)\n",
                      ret, transferred, len);
        if (ret != 0 || (unsigned int)transferred != len) {
                error(dev->ctx, "ret: %d\ttransferred: %d (expected %u)\n",
                      ret, transferred, len);
@@ -528,7 +552,7 @@ static int scan_devices(am7xxx_context *ctx, scan_op op,
                                                goto out;
                                        }
 
                                                goto out;
                                        }
 
-                                       libusb_set_configuration((*dev)->usb_device, 1);
+                                       libusb_set_configuration((*dev)->usb_device, 2);
                                        libusb_claim_interface((*dev)->usb_device, 0);
                                        goto out;
                                }
                                        libusb_claim_interface((*dev)->usb_device, 0);
                                        goto out;
                                }
@@ -551,7 +575,9 @@ out:
        return ret;
 }
 
        return ret;
 }
 
-int am7xxx_init(am7xxx_context **ctx)
+/* Public API */
+
+AM7XXX_PUBLIC int am7xxx_init(am7xxx_context **ctx)
 {
        int ret = 0;
 
 {
        int ret = 0;
 
@@ -590,7 +616,7 @@ out:
        return ret;
 }
 
        return ret;
 }
 
-void am7xxx_shutdown(am7xxx_context *ctx)
+AM7XXX_PUBLIC void am7xxx_shutdown(am7xxx_context *ctx)
 {
        am7xxx_device *current;
 
 {
        am7xxx_device *current;
 
@@ -612,12 +638,12 @@ void am7xxx_shutdown(am7xxx_context *ctx)
        ctx = NULL;
 }
 
        ctx = NULL;
 }
 
-void am7xxx_set_log_level(am7xxx_context *ctx, am7xxx_log_level log_level)
+AM7XXX_PUBLIC void am7xxx_set_log_level(am7xxx_context *ctx, am7xxx_log_level log_level)
 {
        ctx->log_level = log_level;
 }
 
 {
        ctx->log_level = log_level;
 }
 
-int am7xxx_open_device(am7xxx_context *ctx, am7xxx_device **dev,
+AM7XXX_PUBLIC int am7xxx_open_device(am7xxx_context *ctx, am7xxx_device **dev,
                       unsigned int device_index)
 {
        int ret;
                       unsigned int device_index)
 {
        int ret;
@@ -639,7 +665,7 @@ int am7xxx_open_device(am7xxx_context *ctx, am7xxx_device **dev,
        return ret;
 }
 
        return ret;
 }
 
-int am7xxx_close_device(am7xxx_device *dev)
+AM7XXX_PUBLIC int am7xxx_close_device(am7xxx_device *dev)
 {
        if (dev == NULL) {
                fatal("dev must not be NULL!\n");
 {
        if (dev == NULL) {
                fatal("dev must not be NULL!\n");
@@ -653,7 +679,7 @@ int am7xxx_close_device(am7xxx_device *dev)
        return 0;
 }
 
        return 0;
 }
 
-int am7xxx_get_device_info(am7xxx_device *dev,
+AM7XXX_PUBLIC int am7xxx_get_device_info(am7xxx_device *dev,
                           am7xxx_device_info *device_info)
 {
        int ret;
                           am7xxx_device_info *device_info)
 {
        int ret;
@@ -692,7 +718,7 @@ int am7xxx_get_device_info(am7xxx_device *dev,
        return 0;
 }
 
        return 0;
 }
 
-int am7xxx_calc_scaled_image_dimensions(am7xxx_device *dev,
+AM7XXX_PUBLIC int am7xxx_calc_scaled_image_dimensions(am7xxx_device *dev,
                                        unsigned int upscale,
                                        unsigned int original_width,
                                        unsigned int original_height,
                                        unsigned int upscale,
                                        unsigned int original_width,
                                        unsigned int original_height,
@@ -754,7 +780,7 @@ int am7xxx_calc_scaled_image_dimensions(am7xxx_device *dev,
        return 0;
 }
 
        return 0;
 }
 
-int am7xxx_send_image(am7xxx_device *dev,
+AM7XXX_PUBLIC int am7xxx_send_image(am7xxx_device *dev,
                      am7xxx_image_format format,
                      unsigned int width,
                      unsigned int height,
                      am7xxx_image_format format,
                      unsigned int width,
                      unsigned int height,
@@ -790,7 +816,7 @@ int am7xxx_send_image(am7xxx_device *dev,
        return send_data(dev, image, image_size);
 }
 
        return send_data(dev, image, image_size);
 }
 
-int am7xxx_set_power_mode(am7xxx_device *dev, am7xxx_power_mode mode)
+AM7XXX_PUBLIC int am7xxx_set_power_mode(am7xxx_device *dev, am7xxx_power_mode mode)
 {
        int ret;
        struct am7xxx_header h = {
 {
        int ret;
        struct am7xxx_header h = {