26
26
}
27
27
/// Write a single color for ws2812 devices
28
28
#[ cfg( feature = "slow" ) ]
29
- fn write_color ( & mut self , data : Color ) {
30
- let mut serial_bits = ( data. g as u32 ) << 16 | ( data. r as u32 ) << 8 | ( data. b as u32 ) << 0 ;
31
- for _ in 0 ..24 {
32
- if ( serial_bits & 0x00800000 ) != 0 {
29
+ fn write_byte ( & mut self , data : u8 ) {
30
+ for _ in 0 ..8 {
31
+ if ( data & 0x80 ) != 0 {
33
32
block ! ( self . timer. wait( ) ) . ok ( ) ;
34
33
self . pin . set_high ( ) ;
35
34
block ! ( self . timer. wait( ) ) . ok ( ) ;
@@ -42,15 +41,14 @@ where
42
41
block ! ( self . timer. wait( ) ) . ok ( ) ;
43
42
block ! ( self . timer. wait( ) ) . ok ( ) ;
44
43
}
45
- serial_bits <<= 1 ;
44
+ data <<= 1 ;
46
45
}
47
46
}
48
47
49
48
#[ cfg( not( feature = "slow" ) ) ]
50
- fn write_color ( & mut self , data : Color ) {
51
- let mut serial_bits = ( data. g as u32 ) << 16 | ( data. r as u32 ) << 8 | ( data. b as u32 ) << 0 ;
52
- for _ in 0 ..24 {
53
- if ( serial_bits & 0x00800000 ) != 0 {
49
+ fn write_byte ( & mut self , data : u8 ) {
50
+ for _ in 0 ..8 {
51
+ if ( data & 0x80 ) != 0 {
54
52
block ! ( self . timer. wait( ) ) . ok ( ) ;
55
53
self . pin . set_high ( ) ;
56
54
block ! ( self . timer. wait( ) ) . ok ( ) ;
63
61
self . pin . set_low ( ) ;
64
62
block ! ( self . timer. wait( ) ) . ok ( ) ;
65
63
}
66
- serial_bits <<= 1 ;
64
+ data <<= 1 ;
67
65
}
68
66
}
69
67
}
81
79
T : Iterator < Item = Color > ,
82
80
{
83
81
for item in iterator {
84
- self . write_color ( item) ;
82
+ self . write_byte ( item. g ) ;
83
+ self . write_byte ( item. r ) ;
84
+ self . write_byte ( item. b ) ;
85
85
}
86
86
// Get a timeout period of 300 ns
87
87
for _ in 0 ..900 {
0 commit comments