LibDriver WS2812B
Loading...
Searching...
No Matches
driver_ws2812b_write_test.c
Go to the documentation of this file.
1
36
38#include <stdlib.h>
39
40static ws2812b_handle_t gs_handle;
41static uint8_t gs_buffer[1024];
42static uint32_t gs_rgb[21];
43
53uint8_t ws2812b_write_test(uint32_t cnt, uint32_t times)
54{
55 uint8_t res;
56 uint32_t num;
57 uint32_t i, j;
58 ws2812b_info_t info;
59 const uint32_t color[7] = {0xFF0000U, 0xFF7F00U, 0xFFFF00U, 0x00FF00U, 0x00FFFFU, 0x0000FFU, 0x8F00FFU};
60
61 /* link interface function */
68
69 /* get information */
70 res = ws2812b_info(&info);
71 if (res != 0)
72 {
73 ws2812b_interface_debug_print("ws2812b: get info failed.\n");
74
75 return 1;
76 }
77 else
78 {
79 /* print chip info */
80 ws2812b_interface_debug_print("ws2812b: chip is %s.\n", info.chip_name);
81 ws2812b_interface_debug_print("ws2812b: manufacturer is %s.\n", info.manufacturer_name);
82 ws2812b_interface_debug_print("ws2812b: interface is %s.\n", info.interface);
83 ws2812b_interface_debug_print("ws2812b: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
84 ws2812b_interface_debug_print("ws2812b: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
85 ws2812b_interface_debug_print("ws2812b: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
86 ws2812b_interface_debug_print("ws2812b: max current is %0.2fmA.\n", info.max_current_ma);
87 ws2812b_interface_debug_print("ws2812b: max temperature is %0.1fC.\n", info.temperature_max);
88 ws2812b_interface_debug_print("ws2812b: min temperature is %0.1fC.\n", info.temperature_min);
89 }
90
91 /* check cnt */
92 if (cnt == 0)
93 {
94 ws2812b_interface_debug_print("ws2812b: cnt can't be 0.\n");
95
96 return 1;
97 }
98 if (cnt > 21)
99 {
100 ws2812b_interface_debug_print("ws2812b: cnt is over 21 and use 21.\n");
101 }
102
103 /* start write test */
104 ws2812b_interface_debug_print("ws2812b: start write test.\n");
105
106 /* ws2812b initialization */
107 res = ws2812b_init(&gs_handle);
108 if (res != 0)
109 {
110 ws2812b_interface_debug_print("ws2812b: init failed.\n");
111
112 return 1;
113 }
114
115 /* set number */
116 num = cnt > 21 ? 21 : cnt;
117
118 for (i = 0; i < times; i++)
119 {
120 for (j = 0; j < num; j++)
121 {
122 gs_rgb[j] = color[i % 7];
123 }
124 res = ws2812b_write(&gs_handle, (uint32_t *)gs_rgb, num, gs_buffer, 1024);
125 if (res != 0)
126 {
127 ws2812b_interface_debug_print("ws2812b: write failed.\n");
128 (void)ws2812b_deinit(&gs_handle);
129
130 return 1;
131 }
132
133 /* delay 1000 ms */
135
136 /* output */
137 ws2812b_interface_debug_print("ws2812b: %d/%d times.\n", i + 1, times);
138 }
139
140 /* close all LEDs */
141 for (j = 0; j < num; j++)
142 {
143 gs_rgb[j] = 0x00;
144 }
145 res = ws2812b_write(&gs_handle, (uint32_t *)gs_rgb, num, gs_buffer, 1024);
146 if (res != 0)
147 {
148 ws2812b_interface_debug_print("ws2812b: write failed.\n");
149 (void)ws2812b_deinit(&gs_handle);
150
151 return 1;
152 }
153
154 /* finish write test */
155 ws2812b_interface_debug_print("ws2812b: finish write test.\n");
156
157 /* close the chip */
158 (void)ws2812b_deinit(&gs_handle);
159
160 return 0;
161}
driver ws2812b write test header file
uint8_t ws2812b_info(ws2812b_info_t *info)
get chip's information
struct ws2812b_info_s ws2812b_info_t
ws2812b information structure definition
uint8_t ws2812b_write(ws2812b_handle_t *handle, uint32_t *rgb, uint32_t len, uint8_t *temp, uint32_t temp_len)
write reset and color frame
uint8_t ws2812b_deinit(ws2812b_handle_t *handle)
close the chip
struct ws2812b_handle_s ws2812b_handle_t
ws2812b handle structure definition
uint8_t ws2812b_init(ws2812b_handle_t *handle)
initialize the chip
void ws2812b_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t ws2812b_interface_spi_write_cmd(uint8_t *buf, uint16_t len)
interface spi bus write command
uint8_t ws2812b_interface_spi_10mhz_init(void)
interface spi 10mhz bus init
uint8_t ws2812b_interface_spi_deinit(void)
interface spi bus deinit
void ws2812b_interface_delay_ms(uint32_t ms)
interface delay ms
uint8_t ws2812b_write_test(uint32_t cnt, uint32_t times)
write test
float supply_voltage_max_v
uint32_t driver_version
char manufacturer_name[32]
float supply_voltage_min_v