39 #include <linux/i2c-dev.h>    41 #include <sys/ioctl.h>    43 #define PCA9685_SUBADR1 0x2    44 #define PCA9685_SUBADR2 0x3    45 #define PCA9685_SUBADR3 0x4    47 #define PCA9685_MODE1 0x0    48 #define PCA9685_PRESCALE 0xFE    52 #define LED0_OFF_L 0x8    53 #define LED0_OFF_H 0x9    55 #define ALLLED_ON_L 0xFA    56 #define ALLLED_ON_H 0xFB    57 #define ALLLED_OFF_L 0xFC    58 #define ALLLED_OFF_H 0xFD    60 #define PWM_FREQUENCY 60                    //60Hz 16.7ms    61 #define PWM_PULSE_WIDTH_MAX 12000           //12ms    67 void PCA9685_setPWM(uint8_t ch, uint16_t onTime, uint16_t offTime);
    73   printf(
"Init_0000000200000001\n");
    75         char i2cFileName[] = 
"/dev/i2c-1";
    76         int driverAddress = 0x40;
    80         if((i2c = open(i2cFileName, O_RDWR)) < 0){
    81             printf(
"I2C open err\n");
    85         if(ioctl(i2c, I2C_SLAVE, driverAddress) < 0){
    86             printf(
"ioctl err\n");
    99   printf(
"ReInit_0000000200000001\n");
   104   printf(
"Finalize_0000000200000001\n");
   129   printf(
"SetPosition_0000000200000001, position=%f\n", position);
   130   (*halComponent)->positionControlActuator.actualPosition = position;
   131   int16_t _minAngle = 0;
   132   int16_t _maxAngle = 180;
   133   int16_t _minServoPL = 143;
   134   int16_t _maxServoPL = 471;
   135   uint16_t pulseLen = (position-_minAngle)*(_maxServoPL-_minServoPL)/(_maxAngle-_minAngle) + _minServoPL;
   141   printf(
"GetPosition_0000000200000001\n");
   142   *position = &(*halComponent)->positionControlActuator.actualPosition;
   194     float prescaleval = 25000000;
   198     uint8_t prescale = 101;
   200     uint8_t newmode = (oldmode&0x7F) | 0x10;
   215     pulseWidth = pulseWidth_usec / pulselength;
   225     sendData[1] = (uint8_t)(0x00ff & onTime);
   226     sendData[2] = (uint8_t)((0xff00 & onTime) >> 8);
   227     sendData[3] = (uint8_t)(0x00ff & offTime);
   228     sendData[4] = (uint8_t)((0xff00 & offTime) >> 8);
   230     if(write(i2c, sendData, 5) != 5){
   231         printf(
"PCA9685_setPWM() err\n");
   241     if(write(i2c, &sendData, 1) != 1){
   242         printf(
"PCA9685_read() err1\n");
   245         if(read(i2c, &readData, 1) != 1){
   246             printf(
"PCA9685_read() err2\n");
   259     if(write(i2c, buf, 2) != 2){
   260         printf(
"PCA9685_write() err\n");
 enum ReturnCode ReInit_0000000200000001()
enum ReturnCode AddObserver_0000000200000001()
uint8_t PCA9685_read(uint8_t adr)
OpenEL Common Header File  3.0.0. 
enum ReturnCode GetProperty_0000000200000001()
enum ReturnCode GetTime_0000000200000001()
enum ReturnCode SetPosition_0000000200000001(HALCOMPONENT_T **halComponent, halfloat position)
void PCA9685_pwmWrite(uint8_t ch, double pulseWidth_usec)
void PCA9685_init(float freq)
void PCA9685_setPWM(uint8_t ch, uint16_t onTime, uint16_t offTime)
enum ReturnCode Init_0000000200000001()
enum ReturnCode GetPosition_0000000200000001(HALCOMPONENT_T **halComponent, halfloat **position)
void PCA9685_write(uint8_t adr, uint8_t dat)
const EL_CMN_FNC_TBL_T component_0000000200000001
OpenEL UTRX-17-1(PCA9685)(0000000020000001) header file  3.0.0. 
enum ReturnCode RemoveObserver_0000000200000001()
enum ReturnCode Finalize_0000000200000001()