diff options
Diffstat (limited to 'drivers/avr/ws2812.c')
| -rw-r--r-- | drivers/avr/ws2812.c | 129 | 
1 files changed, 2 insertions, 127 deletions
| diff --git a/drivers/avr/ws2812.c b/drivers/avr/ws2812.c index dc7e8d48a8..82d985c20a 100644 --- a/drivers/avr/ws2812.c +++ b/drivers/avr/ws2812.c @@ -36,108 +36,6 @@  void ws2812_sendarray(uint8_t *array, uint16_t length);  void ws2812_sendarray_mask(uint8_t *array, uint16_t length, uint8_t pinmask); -#ifdef RGBW_BB_TWI - -// Port for the I2C -#    define I2C_DDR DDRD -#    define I2C_PIN PIND -#    define I2C_PORT PORTD - -// Pins to be used in the bit banging -#    define I2C_CLK 0 -#    define I2C_DAT 1 - -#    define I2C_DATA_HI()           \ -        I2C_DDR &= ~(1 << I2C_DAT); \ -        I2C_PORT |= (1 << I2C_DAT); -#    define I2C_DATA_LO()          \ -        I2C_DDR |= (1 << I2C_DAT); \ -        I2C_PORT &= ~(1 << I2C_DAT); - -#    define I2C_CLOCK_HI()          \ -        I2C_DDR &= ~(1 << I2C_CLK); \ -        I2C_PORT |= (1 << I2C_CLK); -#    define I2C_CLOCK_LO()         \ -        I2C_DDR |= (1 << I2C_CLK); \ -        I2C_PORT &= ~(1 << I2C_CLK); - -#    define I2C_DELAY 1 - -void I2C_WriteBit(unsigned char c) { -    if (c > 0) { -        I2C_DATA_HI(); -    } else { -        I2C_DATA_LO(); -    } - -    I2C_CLOCK_HI(); -    _delay_us(I2C_DELAY); - -    I2C_CLOCK_LO(); -    _delay_us(I2C_DELAY); - -    if (c > 0) { -        I2C_DATA_LO(); -    } - -    _delay_us(I2C_DELAY); -} - -// Inits bitbanging port, must be called before using the functions below -// -void I2C_Init(void) { -    I2C_PORT &= ~((1 << I2C_DAT) | (1 << I2C_CLK)); - -    I2C_CLOCK_HI(); -    I2C_DATA_HI(); - -    _delay_us(I2C_DELAY); -} - -// Send a START Condition -// -void I2C_Start(void) { -    // set both to high at the same time -    I2C_DDR &= ~((1 << I2C_DAT) | (1 << I2C_CLK)); -    _delay_us(I2C_DELAY); - -    I2C_DATA_LO(); -    _delay_us(I2C_DELAY); - -    I2C_CLOCK_LO(); -    _delay_us(I2C_DELAY); -} - -// Send a STOP Condition -// -void I2C_Stop(void) { -    I2C_CLOCK_HI(); -    _delay_us(I2C_DELAY); - -    I2C_DATA_HI(); -    _delay_us(I2C_DELAY); -} - -// write a byte to the I2C slave device -// -unsigned char I2C_Write(unsigned char c) { -    for (char i = 0; i < 8; i++) { -        I2C_WriteBit(c & 128); - -        c <<= 1; -    } - -    I2C_WriteBit(0); -    _delay_us(I2C_DELAY); -    _delay_us(I2C_DELAY); - -    // _delay_us(I2C_DELAY); -    // return I2C_ReadBit(); -    return 0; -} - -#endif -  // Setleds for standard RGB  void inline ws2812_setleds(LED_TYPE *ledarray, uint16_t leds) {      // ws2812_setleds_pin(ledarray,leds, _BV(ws2812_pin)); @@ -145,38 +43,15 @@ void inline ws2812_setleds(LED_TYPE *ledarray, uint16_t leds) {  }  void inline ws2812_setleds_pin(LED_TYPE *ledarray, uint16_t leds, uint8_t pinmask) { -#ifdef RGBW_BB_TWI -    uint8_t sreg_prev, twcr_prev; -    sreg_prev = SREG; -    twcr_prev = TWCR; -    cli(); -    TWCR &= ~(1 << TWEN); -    I2C_Init(); -    I2C_Start(); -    I2C_Write(0x84); -    uint16_t datlen = leds << 2; -    uint8_t  curbyte; -    uint8_t *data = (uint8_t *)ledarray; -    while (datlen--) { -        curbyte = *data++; -        I2C_Write(curbyte); -    } -    I2C_Stop(); -    SREG = sreg_prev; -    TWCR = twcr_prev; -#endif -    // ws2812_DDRREG |= pinmask; // Enable DDR      // new universal format (DDR)      _SFR_IO8((RGB_DI_PIN >> 4) + 1) |= pinmask;      ws2812_sendarray_mask((uint8_t *)ledarray, leds * sizeof(LED_TYPE), pinmask); -#ifndef RGBW_BB_TWI -#    ifdef RGBW +#ifdef RGBW      _delay_us(80); -#    else +#else      _delay_us(50); -#    endif  #endif  } | 
