OSDN Git Service

consumer_ir: add array length to get carrier freq
authorAlex Ray <aray@google.com>
Wed, 11 Sep 2013 23:20:07 +0000 (16:20 -0700)
committerAlex Ray <aray@google.com>
Thu, 12 Sep 2013 00:51:19 +0000 (17:51 -0700)
Change-Id: Iefb424db6f16ffefa40da56c765c9b7a24bea397

include/hardware/consumerir.h
modules/consumerir/consumerir.c

index 491f852..5adf6be 100644 (file)
@@ -66,12 +66,12 @@ typedef struct consumerir_device {
      * (*get_carrier_freqs)() is called by the ConsumerIrService to enumerate
      * which frequencies the IR transmitter supports.  The HAL implementation
      * should fill an array of consumerir_freq_range structs with the
-     * appropriate values for the transmitter.
+     * appropriate values for the transmitter, up to len elements.
      *
      * returns: the number of ranges on success. A negative error code on error.
      */
     int (*get_carrier_freqs)(struct consumerir_device *dev,
-            consumerir_freq_range_t *ranges);
+            size_t len, consumerir_freq_range_t *ranges);
 
     /* Reserved for future use. Must be NULL. */
     void* reserved[8 - 3];
index 6a032a7..83eba75 100644 (file)
@@ -54,10 +54,13 @@ static int consumerir_get_num_carrier_freqs(struct consumerir_device *dev)
 }
 
 static int consumerir_get_carrier_freqs(struct consumerir_device *dev,
-    consumerir_freq_range_t *ranges)
+    size_t len, consumerir_freq_range_t *ranges)
 {
-    memcpy(ranges, consumerir_freqs, sizeof(consumerir_freqs));
-    return ARRAY_SIZE(consumerir_freqs);
+    size_t to_copy = ARRAY_SIZE(consumerir_freqs);
+
+    to_copy = len < to_copy ? len : to_copy;
+    memcpy(ranges, consumerir_freqs, to_copy * sizeof(consumerir_freq_range_t));
+    return to_copy;
 }
 
 static int consumerir_close(hw_device_t *dev)