AuroraRAS commented on PR #18510:
URL: https://github.com/apache/nuttx/pull/18510#issuecomment-4020898197

   > Could you please give more detail on how you validated the test cases and 
include some test logs?
   
   I will provide the test logs and part of the program code here.
   ```
   NuttShell (NSH) NuttX-12.12.0
   nsh> ecrf_test
   --- EvilCrowRF-V2 Hardware Validation ---
   
   Testing device: /dev/radio0
     [PASS] FD: 3
   Starting CC1101 IOCTL hardware test on /dev/radio0...
     [PASS] Frequency: Target 433000000 Hz, Actual 432999816 Hz
     [PASS] Address: Target 0x5A, Actual 0x5A
     [PASS] TX Power Index: Target 2, Actual 2
     [PASS] Modulation: Target 2, Actual 2
     [PASS] Bitrate: Target 250000 bps, Actual 249938 bps
     [PASS] FSK Deviation: Target 47000 Hz, Actual 44433 Hz
   CC1101 IOCTL hardware test completed successfully.
   
   Testing device: /dev/radio1
     [PASS] FD: 3
   Starting CC1101 IOCTL hardware test on /dev/radio1...
     [PASS] Frequency: Target 433000000 Hz, Actual 432999816 Hz
     [PASS] Address: Target 0x5A, Actual 0x5A
     [PASS] TX Power Index: Target 2, Actual 2
     [PASS] Modulation: Target 2, Actual 2
     [PASS] Bitrate: Target 250000 bps, Actual 249938 bps
     [PASS] FSK Deviation: Target 47000 Hz, Actual 44433 Hz
   CC1101 IOCTL hardware test completed successfully.
   
   Testing device: /dev/nrf24l01
     [PASS] FD: 3
   Starting nRF24L01 IOCTL tests...
     [PASS] Freq: 2450000000 Hz
     [PASS] TX Power: -6 dBm
     [PASS] Fine TX Power: 0 (0.01 dBm)
     [PASS] Modulation correctly rejected non-GFSK.
     [PASS] Address: AA:BB:CC:DD:EE
     [PASS] Retransmit Config (Delay: 5, Count: 10)
     [PASS] Data Rate: 2Mbps
     [PASS] State Transition to STANDBY
     [PASS] TX Payload NoACK: Enabled
   Testing completed. Failures: 0
   
   --- Starting Data Transmission Tests ---
   
   Starting CC1101 TX/RX test: /dev/radio0 -> /dev/radio1
     [INFO] Transmitting 30 bytes: 'EvilCrow CC1101 Test Payload!'
     [PASS] Read 30 bytes payload (RSSI: -32 dBm, SNR: 49 dB).
     [PASS] Payload verification successful.
   
   Starting CC1101 TX/RX test: /dev/radio1 -> /dev/radio0
     [INFO] Transmitting 30 bytes: 'EvilCrow CC1101 Test Payload!'
     [PASS] Read 30 bytes payload (RSSI: -32 dBm, SNR: 41 dB).
     [PASS] Payload verification successful.
   
   Starting CC1101 Throughput Stress Test: /dev/radio0 -> /dev/radio1
     [INFO] Payload size: 60 bytes/packet, Total: 100 packets
     [STAT] Time elapsed: 1.570 seconds
     [STAT] Delivery Rate: 100/100 packets (100.0%)
     [STAT] Throughput: 3821.66 Bytes/sec (30573.25 bps)
   
   Starting CC1101 Throughput Stress Test: /dev/radio1 -> /dev/radio0
     [INFO] Payload size: 60 bytes/packet, Total: 100 packets
     [STAT] Time elapsed: 2.550 seconds
     [STAT] Delivery Rate: 82/100 packets (82.0%)
     [STAT] Throughput: 1929.41 Bytes/sec (15435.29 bps)
   
   --- Starting Button Tests ---
   
   Testing buttons on device: /dev/buttons
   Listening for button events on /dev/buttons...
     [STAT] Button Released! (Bitmask: 0x00)
     [STAT] Button Pressed! (Bitmask: 0x01)
     [STAT] Button Released! (Bitmask: 0x00)
     [STAT] Button Pressed! (Bitmask: 0x02)
     [PASS] FD: 3
   
   ------------------------------------------
   Result: ALL IOCTL parameters and TX/RX data exchanges executed successfully.
   nsh> ecrf_test
   --- EvilCrowRF-V2 Hardware Validation ---
   
   Testing device: /dev/radio0
     [PASS] FD: 3
   Starting CC1101 IOCTL hardware test on /dev/radio0...
     [PASS] Frequency: Target 433000000 Hz, Actual 432999816 Hz
     [PASS] Address: Target 0x5A, Actual 0x5A
     [PASS] TX Power Index: Target 2, Actual 2
     [PASS] Modulation: Target 2, Actual 2
     [PASS] Bitrate: Target 250000 bps, Actual 249938 bps
     [PASS] FSK Deviation: Target 47000 Hz, Actual 44433 Hz
   CC1101 IOCTL hardware test completed successfully.
   
   Testing device: /dev/radio1
     [PASS] FD: 3
   Starting CC1101 IOCTL hardware test on /dev/radio1...
     [PASS] Frequency: Target 433000000 Hz, Actual 432999816 Hz
     [PASS] Address: Target 0x5A, Actual 0x5A
     [PASS] TX Power Index: Target 2, Actual 2
     [PASS] Modulation: Target 2, Actual 2
     [PASS] Bitrate: Target 250000 bps, Actual 249938 bps
     [PASS] FSK Deviation: Target 47000 Hz, Actual 44433 Hz
   CC1101 IOCTL hardware test completed successfully.
   
   Testing device: /dev/nrf24l01
     [PASS] FD: 3
   Starting nRF24L01 IOCTL tests...
     [PASS] Freq: 2450000000 Hz
     [PASS] TX Power: -6 dBm
     [PASS] Fine TX Power: 0 (0.01 dBm)
     [PASS] Modulation correctly rejected non-GFSK.
     [PASS] Address: AA:BB:CC:DD:EE
     [PASS] Retransmit Config (Delay: 5, Count: 10)
     [PASS] Data Rate: 2Mbps
     [PASS] State Transition to STANDBY
     [PASS] TX Payload NoACK: Enabled
   Testing completed. Failures: 0
   
   --- Starting Data Transmission Tests ---
   
   Starting CC1101 TX/RX test: /dev/radio0 -> /dev/radio1
     [INFO] Transmitting 30 bytes: 'EvilCrow CC1101 Test Payload!'
     [PASS] Read 30 bytes payload (RSSI: -33 dBm, SNR: 44 dB).
     [PASS] Payload verification successful.
   
   Starting CC1101 TX/RX test: /dev/radio1 -> /dev/radio0
     [INFO] Transmitting 30 bytes: 'EvilCrow CC1101 Test Payload!'
     [PASS] Read 30 bytes payload (RSSI: -33 dBm, SNR: 43 dB).
     [PASS] Payload verification successful.
   
   Starting CC1101 Throughput Stress Test: /dev/radio0 -> /dev/radio1
     [INFO] Payload size: 60 bytes/packet, Total: 100 packets
     [STAT] Time elapsed: 1.570 seconds
     [STAT] Delivery Rate: 100/100 packets (100.0%)
     [STAT] Throughput: 3821.66 Bytes/sec (30573.25 bps)
   
   Starting CC1101 Throughput Stress Test: /dev/radio1 -> /dev/radio0
     [INFO] Payload size: 60 bytes/packet, Total: 100 packets
     [STAT] Time elapsed: 1.580 seconds
     [STAT] Delivery Rate: 100/100 packets (100.0%)
     [STAT] Throughput: 3797.47 Bytes/sec (30379.75 bps)
   
   --- Starting Button Tests ---
   
   Testing buttons on device: /dev/buttons
   Listening for button events on /dev/buttons...
     [STAT] Button Released! (Bitmask: 0x00)
     [STAT] Button Pressed! (Bitmask: 0x01)
     [STAT] Button Released! (Bitmask: 0x00)
     [STAT] Button Pressed! (Bitmask: 0x02)
     [PASS] FD: 3
   
   ------------------------------------------
   Result: ALL IOCTL parameters and TX/RX data exchanges executed successfully.
   nsh> 
   ```
   
   ```c
   /* CC1101 TX to RX Throughput Stress Test */
   static int test_cc1101_throughput(const char *tx_devpath, const char 
*rx_devpath)
   {
       int fd_tx, fd_rx;
       char tx_buf[60]; /* Close to max payload 61 bytes allowed by driver */
       char rx_buf[64];
       struct pollfd fds[1];
       int ret;
       
       /* Quantitative parameter configuration */
       int packets_to_send = 100;
       int packets_received = 0;
       size_t payload_bytes_rx = 0;
       struct timespec start_time, end_time;
   
       /* Fill with 0xAA (10101010) to test bit flip rate of RF link */
       memset(tx_buf, 0xAA, sizeof(tx_buf)); 
   
       printf("Starting CC1101 Throughput Stress Test: %s -> %s\n", tx_devpath, 
rx_devpath);
       printf("  [INFO] Payload size: %zu bytes/packet, Total: %d packets\n", 
sizeof(tx_buf), packets_to_send);
   
       fd_tx = open(tx_devpath, O_RDWR);
       if (fd_tx < 0) {
           printf("  [FAIL] Cannot open TX device %s (errno: %d)\n", 
tx_devpath, errno);
           return -1;
       }
   
       fd_rx = open(rx_devpath, O_RDWR | O_NONBLOCK);
       if (fd_rx < 0) {
           printf("  [FAIL] Cannot open RX device %s (errno: %d)\n", 
rx_devpath, errno);
           close(fd_tx);
           return -1;
       }
   
       reset_cc1101_hardware(fd_tx);
       reset_cc1101_hardware(fd_rx);
   
       /* Frequency alignment */
       uint32_t freq = 433000000;
       ioctl(fd_tx, WLIOC_SETRADIOFREQ, (unsigned long)&freq);
       ioctl(fd_rx, WLIOC_SETRADIOFREQ, (unsigned long)&freq);
   
       /* Clear receive buffer residuals */
       while (read(fd_rx, rx_buf, sizeof(rx_buf)) > 0) {}
   
       fds[0].fd = fd_rx;
       fds[0].events = POLLIN;
   
       /* Record start time */
       clock_gettime(CLOCK_MONOTONIC, &start_time);
   
       for (int i = 0; i < packets_to_send; i++) {
           /* Write sequence number in the first byte */
           tx_buf[0] = (char)(i & 0xFF); 
           
           if (write(fd_tx, tx_buf, sizeof(tx_buf)) < 0) {
               printf("  [FAIL] Write failed at sequence %d (errno: %d)\n", i, 
errno);
               break;
           }
   
           /* Timeout set to 50ms to quickly catch packet loss */
           ret = poll(fds, 1, 50); 
           if (ret > 0 && (fds[0].revents & POLLIN)) {
               
               /* 新增:构造标准的接收头部 */
               struct wlioc_rx_hdr_s hdr;
               char payload_buf[64];
               hdr.payload_buffer = (uint8_t *)payload_buf;
               hdr.payload_length = sizeof(payload_buf);
               
               /* 修正:传入结构体指针和结构体大小 */
               ssize_t bytes_read = read(fd_rx, &hdr, sizeof(hdr));
               if (bytes_read == sizeof(hdr)) {
                   /* Verify sequence number from payload_buf */
                   if (payload_buf[0] == (char)(i & 0xFF)) {
                       packets_received++;
                       payload_bytes_rx += sizeof(tx_buf);
                   }
               }
           } else {
               /* Packet loss or timeout, continue to calc loss rate */
           }
       }   
   
       /* Record end time */
       clock_gettime(CLOCK_MONOTONIC, &end_time);
   
       close(fd_tx);
       close(fd_rx);
   
       /* Time elapsed and throughput calculation */
       double elapsed_sec = (end_time.tv_sec - start_time.tv_sec) + 
                            (end_time.tv_nsec - start_time.tv_nsec) / 1e9;
       
       double throughput_Bps = payload_bytes_rx / elapsed_sec;
       double throughput_bps = (payload_bytes_rx * 8.0) / elapsed_sec;
   
       printf("  [STAT] Time elapsed: %.3f seconds\n", elapsed_sec);
       printf("  [STAT] Delivery Rate: %d/%d packets (%.1f%%)\n", 
               packets_received, packets_to_send, 
               (packets_received * 100.0) / packets_to_send);
       printf("  [STAT] Throughput: %.2f Bytes/sec (%.2f bps)\n\n", 
               throughput_Bps, throughput_bps);
   
       return (packets_received > 0) ? 0 : -1;
   }
   
   int main(int argc, FAR char *argv[])
   {
       printf("--- EvilCrowRF-V2 Hardware Validation ---\n\n");
   
       int failures = 0;
   
       /* Base IOCTL configuration tests */
       if (execute_device_test(DEV_RADIO0) < 0) failures++;
       if (execute_device_test(DEV_RADIO1) < 0) failures++;
       if (execute_device_test(DEV_NRF24) < 0) failures++;
   
       /* Data transmission interoperability tests */
       printf("--- Starting Data Transmission Tests ---\n\n");
       if (test_cc1101_tx_rx(DEV_RADIO0, DEV_RADIO1) < 0) failures++;
       if (test_cc1101_tx_rx(DEV_RADIO1, DEV_RADIO0) < 0) failures++;
       if (test_cc1101_throughput(DEV_RADIO0, DEV_RADIO1) < 0) failures++;
       if (test_cc1101_throughput(DEV_RADIO1, DEV_RADIO0) < 0) failures++;
       
       printf("--- Starting Button Tests ---\n\n");
       if (test_buttons("/dev/buttons") < 0) failures++;
   
       printf("------------------------------------------\n");
       if (failures == 0) {
           printf("Result: ALL IOCTL parameters and TX/RX data exchanges 
executed successfully.\n");
       } else {
           printf("Result: %d test section(s) failed standard validations.\n", 
failures);
       }
   
       return failures == 0 ? 0 : 1;
   }
   ```


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to