retvm_if(ch_state[channel] == PCA9685_CH_STATE_NONE, -1,
"ch[%u] is not in used state", channel);
- ret = peripheral_i2c_write_register_byte(g_i2c_h,
- LED0_ON_L + 4*channel, on & 0xFF);
+ ret = peripheral_i2c_write_register_byte(g_i2c_h, LED0_ON_L + 4*channel, on & 0xFF);
retvm_if(ret != PERIPHERAL_ERROR_NONE, -1, "failed to write register");
- ret = peripheral_i2c_write_register_byte(g_i2c_h,
- LED0_ON_H + 4*channel, on >> 8);
+ ret = peripheral_i2c_write_register_byte(g_i2c_h, LED0_ON_H + 4*channel, on >> 8);
retvm_if(ret != PERIPHERAL_ERROR_NONE, -1, "failed to write register");
- ret = peripheral_i2c_write_register_byte(g_i2c_h,
- LED0_OFF_L + 4*channel, off & 0xFF);
+ ret = peripheral_i2c_write_register_byte(g_i2c_h, LED0_OFF_L + 4*channel, off & 0xFF);
retvm_if(ret != PERIPHERAL_ERROR_NONE, -1, "failed to write register");
- ret = peripheral_i2c_write_register_byte(g_i2c_h,
- LED0_OFF_H + 4*channel, off >> 8);
+ ret = peripheral_i2c_write_register_byte(g_i2c_h, LED0_OFF_H + 4*channel, off >> 8);
retvm_if(ret != PERIPHERAL_ERROR_NONE, -1, "failed to write register");
return 0;
int ret = PERIPHERAL_ERROR_NONE;
retvm_if(g_i2c_h == NULL, -1, "Not initialized yet");
- ret = peripheral_i2c_write_register_byte(g_i2c_h,
- ALL_LED_ON_L, on & 0xFF);
+ ret = peripheral_i2c_write_register_byte(g_i2c_h, ALL_LED_ON_L, on & 0xFF);
retvm_if(ret != PERIPHERAL_ERROR_NONE, -1, "failed to write register");
- ret = peripheral_i2c_write_register_byte(g_i2c_h,
- ALL_LED_ON_H, on >> 8);
+ ret = peripheral_i2c_write_register_byte(g_i2c_h, ALL_LED_ON_H, on >> 8);
retvm_if(ret != PERIPHERAL_ERROR_NONE, -1, "failed to write register");
- ret = peripheral_i2c_write_register_byte(g_i2c_h,
- ALL_LED_OFF_L, off & 0xFF);
+ ret = peripheral_i2c_write_register_byte(g_i2c_h, ALL_LED_OFF_L, off & 0xFF);
retvm_if(ret != PERIPHERAL_ERROR_NONE, -1, "failed to write register");
- ret = peripheral_i2c_write_register_byte(g_i2c_h,
- ALL_LED_OFF_H, off >> 8);
+ ret = peripheral_i2c_write_register_byte(g_i2c_h, ALL_LED_OFF_H, off >> 8);
retvm_if(ret != PERIPHERAL_ERROR_NONE, -1, "failed to write register");
return 0;
}
-int resource_pca9685_init(unsigned int ch)
+int resource_pca9685_init(unsigned int ch, unsigned int freq)
{
uint8_t mode1 = 0;
int ret = PERIPHERAL_ERROR_NONE;
ret = peripheral_i2c_open(RPI3_I2C_BUS, PCA9685_ADDRESS, &g_i2c_h);
if (ret != PERIPHERAL_ERROR_NONE) {
- _E("failed to open pca9685-[bus:%d, addr:%d]",
- RPI3_I2C_BUS, PCA9685_ADDRESS);
+ _E("failed to open pca9685-[bus:%d, addr:%d]", RPI3_I2C_BUS, PCA9685_ADDRESS);
return -1;
}
ret = resource_pca9685_set_value_to_all(0, 0);
usleep(500); // wait for oscillator
- ret = resource_pca9685_set_frequency(60);
+ ret = resource_pca9685_set_frequency(freq);
if (ret) {
_E("failed to set frequency");
goto ERROR;
#include <time.h>
#include "log.h"
#include "resource/resource_led.h"
+#include "resource/resource_PCA9685.h"
#include "config.h"
#define DEFAULT_BI_LED_RED 17
#define CONFIG_KEY_RPI_BI_LED_RED "bi.red"
#define CONFIG_KEY_RPI_BI_LED_GREEN "bi.green"
#define CONFIG_KEY_RPI_USE_BI_LED "bi.use"
-
#define DEFAULT_RGB_LED_RED 12
#define DEFAULT_RGB_LED_GREEN 13
#define DEFAULT_RGB_LED_BLUE 24
#define CONFIG_KEY_RPI_RGB_LED_BLUE "rgb.blue"
#define CONFIG_KEY_RPI_USE_RGB_LED "rgb.use"
+#define DEFAULT_RGB_PCA_R 4
+#define DEFAULT_RGB_PCA_G 5
+#define DEFAULT_RGB_PCA_B 10
+
#define CONFIG_GRP_RPI "Rpi.led"
}
-static peripheral_pwm_h _init_pwm(int default_pwm_pin, char *key)
-{
- peripheral_pwm_h pwm;
- int pin;
-
- bool modified = config_get_int_with_default(CONFIG_GRP_RPI, key, default_pwm_pin, &pin);
- _D("PWN: %d, DUTY: %u, period: %u", pin, (unsigned)2e6, (unsigned)2e7);
-
- if (modified) {
- config_save();
- }
-
- int ret = peripheral_pwm_open(1, pin, &pwm);
- retv_error_message(ret != PERIPHERAL_ERROR_NONE, ret, NULL);
-
- ret = peripheral_pwm_set_period(pwm, (unsigned)2e7);
- retv_error_message(ret != PERIPHERAL_ERROR_NONE, ret, NULL);
-
- ret = peripheral_pwm_set_duty_cycle(pwm, (unsigned)2e6);
- retv_error_message(ret != PERIPHERAL_ERROR_NONE, ret, NULL);
-
- ret = peripheral_pwm_set_enabled(pwm, true);
- retv_error_message(ret != PERIPHERAL_ERROR_NONE, ret, NULL);
-
-
-
- return pwm;
-}
-
-static void _init_rgb_led(void)
-{
- bool modified = config_get_int_with_default(CONFIG_GRP_RPI, CONFIG_KEY_RPI_USE_RGB_LED, 1, &s_info.use_rgb_led);
- if (modified) {
- config_save();
- }
-
- if (s_info.use_rgb_led) {
- s_info.pwn_rgb_led[LED_COLOR_RED] = _init_pwm(DEFAULT_RGB_LED_RED, CONFIG_KEY_RPI_RGB_LED_RED);
- s_info.pwn_rgb_led[LED_COLOR_GREEN] = _init_pwm(DEFAULT_RGB_LED_GREEN, CONFIG_KEY_RPI_RGB_LED_GREEN);
- s_info.pwn_rgb_led[LED_COLOR_BLUE] = _init_pwm(DEFAULT_RGB_LED_BLUE, CONFIG_KEY_RPI_RGB_LED_BLUE);
-
-
- peripheral_pwm_set_duty_cycle(s_info.pwn_rgb_led[LED_COLOR_RED], (unsigned)1e7);
- }
-}
+//static peripheral_pwm_h _init_pwm(int default_pwm_pin, char *key)
+//{
+// peripheral_pwm_h pwm;
+// int pin;
+//
+// bool modified = config_get_int_with_default(CONFIG_GRP_RPI, key, default_pwm_pin, &pin);
+// _D("PWN: %d, DUTY: %u, period: %u", pin, (unsigned)2e6, (unsigned)2e7);
+//
+// if (modified) {
+// config_save();
+// }
+//
+// int ret = peripheral_pwm_open(1, pin, &pwm);
+// retv_error_message(ret != PERIPHERAL_ERROR_NONE, ret, NULL);
+//
+// ret = peripheral_pwm_set_period(pwm, (unsigned)2e7);
+// retv_error_message(ret != PERIPHERAL_ERROR_NONE, ret, NULL);
+//
+// ret = peripheral_pwm_set_duty_cycle(pwm, (unsigned)2e6);
+// retv_error_message(ret != PERIPHERAL_ERROR_NONE, ret, NULL);
+//
+// ret = peripheral_pwm_set_enabled(pwm, true);
+// retv_error_message(ret != PERIPHERAL_ERROR_NONE, ret, NULL);
+//
+//
+//
+// return pwm;
+//}
+
+//static void _init_rgb_led(void)
+//{
+// bool modified = config_get_int_with_default(CONFIG_GRP_RPI, CONFIG_KEY_RPI_USE_RGB_LED, 1, &s_info.use_rgb_led);
+// if (modified) {
+// config_save();
+// }
+//
+// if (s_info.use_rgb_led) {
+// s_info.pwn_rgb_led[LED_COLOR_RED] = _init_pwm(DEFAULT_RGB_LED_RED, CONFIG_KEY_RPI_RGB_LED_RED);
+// s_info.pwn_rgb_led[LED_COLOR_GREEN] = _init_pwm(DEFAULT_RGB_LED_GREEN, CONFIG_KEY_RPI_RGB_LED_GREEN);
+// s_info.pwn_rgb_led[LED_COLOR_BLUE] = _init_pwm(DEFAULT_RGB_LED_BLUE, CONFIG_KEY_RPI_RGB_LED_BLUE);
+//
+//
+// peripheral_pwm_set_duty_cycle(s_info.pwn_rgb_led[LED_COLOR_RED], (unsigned)1e7);
+// }
+//}
static void _init_bi_led(void)
{
}
}
+static void _init_pca(void)
+{
+ int ret;
+// int ret = resource_pca9685_init(DEFAULT_RGB_PCA_R, 1000);
+// ret_error_message(ret != PERIPHERAL_ERROR_NONE, ret);
+////
+// ret = resource_pca9685_init(DEFAULT_RGB_PCA_G, 1000);
+// ret_error_message(ret != PERIPHERAL_ERROR_NONE, ret);
+//
+// ret = resource_pca9685_init(DEFAULT_RGB_PCA_B, 1000);
+// ret_error_message(ret != PERIPHERAL_ERROR_NONE, ret);
+//
+ ret = resource_pca9685_set_value_to_channel(DEFAULT_RGB_PCA_R, 0, 0);
+ ret_error_message(ret != PERIPHERAL_ERROR_NONE, ret);
+
+ ret = resource_pca9685_set_value_to_channel(DEFAULT_RGB_PCA_G, 0, 255);
+ ret_error_message(ret != PERIPHERAL_ERROR_NONE, ret);
+
+ ret = resource_pca9685_set_value_to_channel(DEFAULT_RGB_PCA_B, 0, 0);
+ ret_error_message(ret != PERIPHERAL_ERROR_NONE, ret);
+
+// peripheral_i2c_h g_i2c_h;
+// ret = peripheral_i2c_open(1, 0x40, &g_i2c_h);
+// if (ret != PERIPHERAL_ERROR_NONE) {
+// _E("failed to open pca9685-[bus:%d, addr:%d]", RPI3_I2C_BUS, PCA9685_ADDRESS);
+// return;
+// }
+}
+
void resource_led_init(void)
{
_D("Initialize Led");
_init_bi_led();
- _init_rgb_led();
+// _init_rgb_led();
+ _init_pca();
}
void resource_led_destroy(void)
{
peripheral_gpio_close(s_info.gpio_bi_led[LED_COLOR_RED]);
peripheral_gpio_close(s_info.gpio_bi_led[LED_COLOR_GREEN]);
+
+ resource_pca9685_fini(DEFAULT_RGB_PCA_R);
+ resource_pca9685_fini(DEFAULT_RGB_PCA_G);
+ resource_pca9685_fini(DEFAULT_RGB_PCA_B);
}
void resource_led_set(led_color_e color)
s_info.current_color = color;
_led_set(color);
+
+
+ int ret = resource_pca9685_set_value_to_channel(DEFAULT_RGB_PCA_R, 0, 0);
+ ret_error_message(ret != PERIPHERAL_ERROR_NONE, ret);
+
+ ret = resource_pca9685_set_value_to_channel(DEFAULT_RGB_PCA_G, 0, 255);
+ ret_error_message(ret != PERIPHERAL_ERROR_NONE, ret);
+
+ ret = resource_pca9685_set_value_to_channel(DEFAULT_RGB_PCA_B, 0, 0);
+ ret_error_message(ret != PERIPHERAL_ERROR_NONE, ret);
}
void resource_led_blink(led_color_e color, unsigned timeout)