From d8656e14b073084f170e25c469b37363fdb06878 Mon Sep 17 00:00:00 2001 From: Jeonghoon Park Date: Mon, 18 Dec 2017 10:12:02 +0900 Subject: [PATCH] fix PCA9685 maximum channel number --- inc/resource/resource_PCA9685.h | 2 +- src/resource/resource_PCA9685.c | 4 ++-- src/resource/resource_servo_motor.c | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/inc/resource/resource_PCA9685.h b/inc/resource/resource_PCA9685.h index a72154c..aa45477 100644 --- a/inc/resource/resource_PCA9685.h +++ b/inc/resource/resource_PCA9685.h @@ -19,7 +19,7 @@ #ifndef __RESOURCE_PCA9685_H__ #define __RESOURCE_PCA9685_H__ -#define PCA9685_CH_MAX 16 +#define PCA9685_CH_MAX 15 int resource_pca9685_init(unsigned int ch); int resource_pca9685_fini(unsigned int ch); diff --git a/src/resource/resource_PCA9685.c b/src/resource/resource_PCA9685.c index a4c1e55..7481b1b 100644 --- a/src/resource/resource_PCA9685.c +++ b/src/resource/resource_PCA9685.c @@ -55,7 +55,7 @@ typedef enum { static peripheral_i2c_h g_i2c_h = NULL; static unsigned int ref_count = 0; -static pca9685_ch_state_e ch_state[PCA9685_CH_MAX] = {PCA9685_CH_STATE_NONE, }; +static pca9685_ch_state_e ch_state[PCA9685_CH_MAX + 1] = {PCA9685_CH_STATE_NONE, }; int resource_pca9685_set_frequency(unsigned int freq_hz) { @@ -149,7 +149,7 @@ int resource_pca9685_init(unsigned int ch) uint8_t mode1 = 0; int ret = PERIPHERAL_ERROR_NONE; - if (ch == 0 || ch >= PCA9685_CH_MAX) { + if (ch == 0 || ch > PCA9685_CH_MAX) { _E("channel[%u] is out of range", ch); return -1; } diff --git a/src/resource/resource_servo_motor.c b/src/resource/resource_servo_motor.c index a1a2b69..512cc5b 100644 --- a/src/resource/resource_servo_motor.c +++ b/src/resource/resource_servo_motor.c @@ -21,7 +21,7 @@ #define SERVO_MOTOR_MAX PCA9685_CH_MAX -static int servo_motor_index[SERVO_MOTOR_MAX] = {0, }; +static int servo_motor_index[SERVO_MOTOR_MAX + 1] = {0, }; static int resource_servo_motor_init(unsigned int ch) { @@ -50,7 +50,7 @@ void resource_close_servo_motor_all(void) { unsigned int i; - for (i = 1; i < SERVO_MOTOR_MAX; i++) + for (i = 1; i <= SERVO_MOTOR_MAX; i++) resource_close_servo_motor(i); return; @@ -63,7 +63,7 @@ int resource_set_servo_motor_value(unsigned int motor_id, int value) if (motor_id == 0) return -1; - if (motor_id >= SERVO_MOTOR_MAX) + if (motor_id > SERVO_MOTOR_MAX) return -1; if (servo_motor_index[motor_id] == 0) { -- 2.7.4