summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Ray <aray@google.com>2013-09-11 16:20:07 -0700
committerAlex Ray <aray@google.com>2013-09-11 17:51:19 -0700
commitd9d105a0ce6bbaa8d1d1cf70a255612a5dd33701 (patch)
treeec58f857468d2f78d142d7d67ece67cb8fd9b9d9
parentc900b4230c5f33abc1b7bc590c4ffe21ec8a59d0 (diff)
downloadhardware_libhardware-d9d105a0ce6bbaa8d1d1cf70a255612a5dd33701.zip
hardware_libhardware-d9d105a0ce6bbaa8d1d1cf70a255612a5dd33701.tar.gz
hardware_libhardware-d9d105a0ce6bbaa8d1d1cf70a255612a5dd33701.tar.bz2
consumer_ir: add array length to get carrier freq
Change-Id: Iefb424db6f16ffefa40da56c765c9b7a24bea397
-rw-r--r--include/hardware/consumerir.h4
-rw-r--r--modules/consumerir/consumerir.c9
2 files changed, 8 insertions, 5 deletions
diff --git a/include/hardware/consumerir.h b/include/hardware/consumerir.h
index 491f852..5adf6be 100644
--- a/include/hardware/consumerir.h
+++ b/include/hardware/consumerir.h
@@ -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];
diff --git a/modules/consumerir/consumerir.c b/modules/consumerir/consumerir.c
index 6a032a7..83eba75 100644
--- a/modules/consumerir/consumerir.c
+++ b/modules/consumerir/consumerir.c
@@ -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)