Skip to content

Commit 8077f56

Browse files
committed
Merge pull request arduino#1 from zephyrr/master
Merge improved write_payload() and read_payload() - looks good and passes my testing.
2 parents afdb084 + 84146a1 commit 8077f56

File tree

1 file changed

+47
-49
lines changed

1 file changed

+47
-49
lines changed

Diff for: RF24.cpp

+47-49
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)