@@ -135,48 +135,45 @@ uint8_t RF24::write_register(uint8_t reg, uint8_t value)
135135
136136/* ***************************************************************************/
137137
138- uint8_t RF24::write_payload (const void * buf, uint8_t len )
138+ uint8_t RF24::write_payload (const void * buf, uint8_t data_len )
139139{
140140 uint8_t status;
141-
142141 const uint8_t * current = reinterpret_cast <const uint8_t *>(buf);
143142
144- uint8_t data_len = min (len, payload_size) ;
143+ if (data_len > payload_size) data_len = payload_size;
145144 uint8_t blank_len = dynamic_payloads_enabled ? 0 : payload_size - data_len;
146145
147146 // printf("[Writing %u bytes %u blanks]",data_len,blank_len);
148147
149- #if defined (__arm__)
150-
151- status = SPI.transfer (csn_pin, W_TX_PAYLOAD , SPI_CONTINUE);
148+ #if defined (__arm__)
152149
153- if (data_len == 32 || dynamic_payloads_enabled){
154- while ( data_len-- > 1 ){
155- SPI.transfer (csn_pin,*current++, SPI_CONTINUE);
156- }
157- SPI.transfer (csn_pin,*current++);
158- }else {
159- while ( data_len-- ){
160- SPI.transfer (csn_pin,*current++, SPI_CONTINUE);
161- }
162- }
163-
164- if (blank_len){
165- while ( blank_len-- > 1 ){
166- SPI.transfer (csn_pin,0 , SPI_CONTINUE);
167- }
168- SPI.transfer (csn_pin,0 );
169- }
150+ status = SPI.transfer (csn_pin, W_TX_PAYLOAD , SPI_CONTINUE);
170151
152+ if (blank_len){
153+ while ( data_len--){
154+ SPI.transfer (csn_pin,*current++, SPI_CONTINUE);
155+ }
156+ while ( --blank_len ){
157+ SPI.transfer (csn_pin,0 , SPI_CONTINUE);
158+ }
159+ SPI.transfer (csn_pin,0 );
160+ }else {
161+ while ( --data_len ){
162+ SPI.transfer (csn_pin,*current++, SPI_CONTINUE);
163+ }
164+ SPI.transfer (csn_pin,*current);
165+ }
171166
172167 #else
173168
174169 csn (LOW);
175170 status = SPI.transfer ( W_TX_PAYLOAD );
176- while ( data_len-- )
171+ while ( data_len-- ) {
177172 SPI.transfer (*current++);
178- while ( blank_len-- )
173+ }
174+ while ( blank_len-- ) {
179175 SPI.transfer (0 );
176+ }
180177 csn (HIGH);
181178
182179 #endif
@@ -186,46 +183,47 @@ uint8_t RF24::write_payload(const void* buf, uint8_t len)
186183
187184/* ***************************************************************************/
188185
189- uint8_t RF24::read_payload (void * buf, uint8_t len )
186+ uint8_t RF24::read_payload (void * buf, uint8_t data_len )
190187{
191188 uint8_t status;
192189 uint8_t * current = reinterpret_cast <uint8_t *>(buf);
193190
194- uint8_t data_len = min (len, payload_size) ;
191+ if (data_len > payload_size) data_len = payload_size;
195192 uint8_t blank_len = dynamic_payloads_enabled ? 0 : payload_size - data_len;
196193
197194 // printf("[Reading %u bytes %u blanks]",data_len,blank_len);
198195
196+
199197 #if defined (__arm__)
200198
201- status = SPI.transfer (csn_pin, R_RX_PAYLOAD, SPI_CONTINUE );
202-
203- if (data_len == 32 || dynamic_payloads_enabled){
204- while ( data_len-- > 1 ){
205- *current++ = SPI.transfer (csn_pin,0xff , SPI_CONTINUE);
206- }
207- *current++ = SPI.transfer (csn_pin,0xff );
208- }else {
209- while ( data_len-- ){
210- *current++ = SPI.transfer (csn_pin,0xff , SPI_CONTINUE);
211- }
212-
213- }
214- if (blank_len){
215- while ( blank_len-- ){
216- SPI.transfer (csn_pin,0xff , SPI_CONTINUE);
217- }
218- SPI.transfer (csn_pin,0xff );
219- }
199+ status = SPI.transfer (csn_pin, R_RX_PAYLOAD, SPI_CONTINUE );
200+
201+ if ( blank_len ){
202+
203+ while ( data_len-- ){
204+ *current++ = SPI.transfer (csn_pin,0xFF , SPI_CONTINUE);
205+ }
206+ while ( --blank_len ){
207+ SPI.transfer (csn_pin,0xFF , SPI_CONTINUE);
208+ }
209+ SPI.transfer (csn_pin,0xFF );
210+ }else {
211+ while ( --data_len ){
212+ *current++ = SPI.transfer (csn_pin,0xFF , SPI_CONTINUE);
213+ }
214+ *current = SPI.transfer (csn_pin,0xFF );
215+ }
220216
221217 #else
222218
223219 csn (LOW);
224220 status = SPI.transfer ( R_RX_PAYLOAD );
225- while ( data_len-- )
226- *current++ = SPI.transfer (0xff );
227- while ( blank_len-- )
221+ while ( data_len-- ) {
222+ *current++ = SPI.transfer (0xFF );
223+ }
224+ while ( blank_len-- ) {
228225 SPI.transfer (0xff );
226+ }
229227 csn (HIGH);
230228
231229 #endif
0 commit comments