@@ -57,20 +57,64 @@ static void increase_reg_cmd_write(const struct device *dev, uint16_t value)
57
57
data -> reg_cmd_write = (data -> reg_cmd_write + value ) % FT800_RAM_CMD_SIZE ;
58
58
}
59
59
60
- void ft8xx_copro_cmd (const struct device * dev , uint32_t cmd )
60
+ static uint32_t ram_cmd_wr_address (const struct device * dev )
61
61
{
62
62
struct ft8xx_data * data = dev -> data ;
63
63
64
- while (ram_cmd_freespace (dev ) < sizeof (cmd )) {
64
+ return FT800_RAM_CMD + data -> reg_cmd_write ;
65
+ }
66
+
67
+ static size_t ram_cmd_wr16 (const struct device * dev , uint16_t data )
68
+ {
69
+ ft8xx_wr16 (dev , ram_cmd_wr_address (dev ), data );
70
+ increase_reg_cmd_write (dev , sizeof (data ));
71
+
72
+ return sizeof (data );
73
+ }
74
+
75
+ static size_t ram_cmd_wr32 (const struct device * dev , uint32_t data )
76
+ {
77
+ ft8xx_wr32 (dev , ram_cmd_wr_address (dev ), data );
78
+ increase_reg_cmd_write (dev , sizeof (data ));
79
+
80
+ return sizeof (data );
81
+ }
82
+
83
+ static size_t ram_cmd_wr_var (const struct device * dev , const uint8_t * data , size_t data_size ,
84
+ size_t padding_size )
85
+ {
86
+ (void )ft8xx_drv_write (dev , ram_cmd_wr_address (dev ), data , data_size );
87
+ increase_reg_cmd_write (dev , data_size + padding_size );
88
+
89
+ return data_size + padding_size ;
90
+ }
91
+
92
+ static void cmd_beginning (const struct device * dev , size_t cmd_size )
93
+ {
94
+ while (ram_cmd_freespace (dev ) < cmd_size ) {
65
95
refresh_reg_cmd_read (dev );
66
96
}
97
+ }
67
98
68
- ft8xx_wr32 (dev , FT800_RAM_CMD + data -> reg_cmd_write , cmd );
69
- increase_reg_cmd_write (dev , sizeof (cmd ));
70
-
99
+ static void cmd_ending (const struct device * dev , size_t cmd_size , size_t written_bytes )
100
+ {
101
+ __ASSERT (written_bytes == cmd_size , "Written %zu bytes, expected %zu" , written_bytes ,
102
+ cmd_size );
103
+ (void )written_bytes ;
104
+ (void )cmd_size ;
71
105
flush_reg_cmd_write (dev );
72
106
}
73
107
108
+ void ft8xx_copro_cmd (const struct device * dev , uint32_t cmd )
109
+ {
110
+ const size_t cmd_size = sizeof (cmd );
111
+ size_t written_bytes = 0 ;
112
+
113
+ cmd_beginning (dev , cmd_size );
114
+ written_bytes += ram_cmd_wr32 (dev , cmd );
115
+ cmd_ending (dev , cmd_size , written_bytes );
116
+ }
117
+
74
118
void ft8xx_copro_cmd_dlstart (const struct device * dev )
75
119
{
76
120
ft8xx_copro_cmd (dev , CMD_DLSTART );
@@ -88,42 +132,25 @@ void ft8xx_copro_cmd_text(const struct device *dev,
88
132
uint16_t options ,
89
133
const char * string )
90
134
{
91
- struct ft8xx_data * data = dev -> data ;
92
-
93
135
const uint16_t str_bytes = strlen (string ) + 1 ;
94
136
const uint16_t padding_bytes = (4 - (str_bytes % 4 )) % 4 ;
95
- const uint16_t cmd_size = sizeof (CMD_TEXT ) +
96
- sizeof (x ) +
97
- sizeof (y ) +
98
- sizeof (font ) +
99
- sizeof (options ) +
100
- str_bytes +
101
- padding_bytes ;
102
-
103
- while (ram_cmd_freespace (dev ) < cmd_size ) {
104
- refresh_reg_cmd_read (dev );
105
- }
106
-
107
- ft8xx_wr32 (dev , FT800_RAM_CMD + data -> reg_cmd_write , CMD_TEXT );
108
- increase_reg_cmd_write (dev , sizeof (CMD_TEXT ));
109
-
110
- ft8xx_wr16 (dev , FT800_RAM_CMD + data -> reg_cmd_write , x );
111
- increase_reg_cmd_write (dev , sizeof (x ));
112
-
113
- ft8xx_wr16 (dev , FT800_RAM_CMD + data -> reg_cmd_write , y );
114
- increase_reg_cmd_write (dev , sizeof (y ));
115
-
116
- ft8xx_wr16 (dev , FT800_RAM_CMD + data -> reg_cmd_write , font );
117
- increase_reg_cmd_write (dev , sizeof (font ));
118
-
119
- ft8xx_wr16 (dev , FT800_RAM_CMD + data -> reg_cmd_write , options );
120
- increase_reg_cmd_write (dev , sizeof (options ));
121
-
122
- (void )ft8xx_drv_write (dev , FT800_RAM_CMD + data -> reg_cmd_write , (uint8_t * )string ,
123
- str_bytes );
124
- increase_reg_cmd_write (dev , str_bytes + padding_bytes );
125
-
126
- flush_reg_cmd_write (dev );
137
+ const size_t cmd_size = sizeof (CMD_TEXT ) +
138
+ sizeof (x ) +
139
+ sizeof (y ) +
140
+ sizeof (font ) +
141
+ sizeof (options ) +
142
+ str_bytes +
143
+ padding_bytes ;
144
+ size_t written_bytes = 0 ;
145
+
146
+ cmd_beginning (dev , cmd_size );
147
+ written_bytes += ram_cmd_wr32 (dev , CMD_TEXT );
148
+ written_bytes += ram_cmd_wr16 (dev , x );
149
+ written_bytes += ram_cmd_wr16 (dev , y );
150
+ written_bytes += ram_cmd_wr16 (dev , font );
151
+ written_bytes += ram_cmd_wr16 (dev , options );
152
+ written_bytes += ram_cmd_wr_var (dev , (const uint8_t * )string , str_bytes , padding_bytes );
153
+ cmd_ending (dev , cmd_size , written_bytes );
127
154
}
128
155
129
156
void ft8xx_copro_cmd_number (const struct device * dev ,
@@ -133,59 +160,37 @@ void ft8xx_copro_cmd_number(const struct device *dev,
133
160
uint16_t options ,
134
161
int32_t number )
135
162
{
136
- struct ft8xx_data * data = dev -> data ;
137
-
138
- const uint16_t cmd_size = sizeof (CMD_NUMBER ) +
139
- sizeof (x ) +
140
- sizeof (y ) +
141
- sizeof (font ) +
142
- sizeof (options ) +
143
- sizeof (number );
144
-
145
- while (ram_cmd_freespace (dev ) < cmd_size ) {
146
- refresh_reg_cmd_read (dev );
147
- }
148
-
149
- ft8xx_wr32 (dev , FT800_RAM_CMD + data -> reg_cmd_write , CMD_NUMBER );
150
- increase_reg_cmd_write (dev , sizeof (CMD_NUMBER ));
151
-
152
- ft8xx_wr16 (dev , FT800_RAM_CMD + data -> reg_cmd_write , x );
153
- increase_reg_cmd_write (dev , sizeof (x ));
154
-
155
- ft8xx_wr16 (dev , FT800_RAM_CMD + data -> reg_cmd_write , y );
156
- increase_reg_cmd_write (dev , sizeof (y ));
157
-
158
- ft8xx_wr16 (dev , FT800_RAM_CMD + data -> reg_cmd_write , font );
159
- increase_reg_cmd_write (dev , sizeof (font ));
160
-
161
- ft8xx_wr16 (dev , FT800_RAM_CMD + data -> reg_cmd_write , options );
162
- increase_reg_cmd_write (dev , sizeof (options ));
163
-
164
- ft8xx_wr32 (dev , FT800_RAM_CMD + data -> reg_cmd_write , number );
165
- increase_reg_cmd_write (dev , sizeof (number ));
166
-
167
- flush_reg_cmd_write (dev );
163
+ const size_t cmd_size = sizeof (CMD_NUMBER ) +
164
+ sizeof (x ) +
165
+ sizeof (y ) +
166
+ sizeof (font ) +
167
+ sizeof (options ) +
168
+ sizeof (number );
169
+ size_t written_bytes = 0 ;
170
+
171
+ cmd_beginning (dev , cmd_size );
172
+ written_bytes += ram_cmd_wr32 (dev , CMD_NUMBER );
173
+ written_bytes += ram_cmd_wr16 (dev , x );
174
+ written_bytes += ram_cmd_wr16 (dev , y );
175
+ written_bytes += ram_cmd_wr16 (dev , font );
176
+ written_bytes += ram_cmd_wr16 (dev , options );
177
+ written_bytes += ram_cmd_wr32 (dev , number );
178
+ cmd_ending (dev , cmd_size , written_bytes );
168
179
}
169
180
170
181
void ft8xx_copro_cmd_calibrate (const struct device * dev , uint32_t * result )
171
182
{
172
- struct ft8xx_data * data = dev -> data ;
173
-
174
- const uint16_t cmd_size = sizeof (CMD_CALIBRATE ) + sizeof (uint32_t );
175
183
uint32_t result_address ;
176
184
177
- while ( ram_cmd_freespace ( dev ) < cmd_size ) {
178
- refresh_reg_cmd_read ( dev );
179
- }
185
+ const size_t cmd_size = sizeof ( CMD_CALIBRATE ) +
186
+ sizeof ( uint32_t );
187
+ size_t written_bytes = 0 ;
180
188
181
- ft8xx_wr32 (dev , FT800_RAM_CMD + data -> reg_cmd_write , CMD_CALIBRATE );
182
- increase_reg_cmd_write (dev , sizeof (CMD_CALIBRATE ));
183
-
184
- result_address = FT800_RAM_CMD + data -> reg_cmd_write ;
185
- ft8xx_wr32 (dev , result_address , 1UL );
186
- increase_reg_cmd_write (dev , sizeof (uint32_t ));
187
-
188
- flush_reg_cmd_write (dev );
189
+ cmd_beginning (dev , cmd_size );
190
+ written_bytes += ram_cmd_wr32 (dev , CMD_CALIBRATE );
191
+ result_address = ram_cmd_wr_address (dev );
192
+ written_bytes += ram_cmd_wr32 (dev , 1UL );
193
+ cmd_ending (dev , cmd_size , written_bytes );
189
194
190
195
/* Wait until calibration is finished. */
191
196
while (ram_cmd_fullness (dev ) > 0 ) {
0 commit comments