esp-idf-hal icon indicating copy to clipboard operation
esp-idf-hal copied to clipboard

Add RMT receiver

Open enelson1001 opened this issue 3 years ago • 21 comments
trafficstars

Adding receive capability to RMT. I am new to rust so code should be reviewed as it might not represent the rust way of doing things.

enelson1001 avatar Jul 21 '22 16:07 enelson1001

How do I run the ci.yml on my fork on my local pc?

enelson1001 avatar Jul 22 '22 03:07 enelson1001

How do I run the ci.yml on my fork on my local pc?

https://github.com/nektos/act could work, alternatively, you can keep pushing here and we'll squash the commit history when its ready to merge :).

MabezDev avatar Jul 22 '22 10:07 MabezDev

When testing rmt-transceiver.rs I see the following output.

I (0) cpu_start: Starting scheduler on APP CPU.
I (348) mcpwm_test: Starting APP!
I (348) gpio: GPIO[36]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0 
W (368) mcpwm_test: Rx Loop
I (368) gpio: GPIO[25]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0 
E (378) mcpwm_test: Tx Loop
W (868) mcpwm_test: Rx Loop
W (1368) mcpwm_test: Rx Loop
E (1378) mcpwm_test: Tx Loop
W (1868) mcpwm_test: Rx Loop
W (1868) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (1868) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (1878) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (1888) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (1898) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
E (2378) mcpwm_test: Tx Loop
W (2408) mcpwm_test: Rx Loop
W (2408) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (2408) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (2418) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (2428) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (2438) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (2948) mcpwm_test: Rx Loop
W (2948) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (2948) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (2958) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (2968) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (2978) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)

In theory the transmit time for the RMT signal (total time) should be 3.930 milliseconds. The Tx loop from above has timestamp 378, the 2nd and 3rd RX loop time stamps are 868 and 1368. Not sure why one of those Rx loop timestamps did not pick up the 1st Tx loop? The 2nd Tx Loop and beyond gets picked up by the Rx loop. Strange?

enelson1001 avatar Jul 25 '22 16:07 enelson1001

Maybe the problem (or maybe it is not a problem) is with logging. In the screen capture below it shows 2 Rx Loops one right after another (timestamp 2408, 2948) but only one Tx Loop (timestamp 2378). From ten on out I see one Tx Loop and 2 Rx Loops (one with data the other empty) which is correct since Rx Loop is every 500 milliseconds and Tx Loop is every 1 second. I not sure why the screen output should look as it is shown and if it really is a problem.

I (348) mcpwm_test: Starting APP!
I (348) gpio: GPIO[36]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0 
W (368) mcpwm_test: Rx Loop
I (368) gpio: GPIO[25]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0 
E (378) mcpwm_test: Tx Loop
W (868) mcpwm_test: Rx Loop
W (1368) mcpwm_test: Rx Loop
E (1378) mcpwm_test: Tx Loop
W (1868) mcpwm_test: Rx Loop
W (1868) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (1868) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (1878) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (1888) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (1898) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
E (2378) mcpwm_test: Tx Loop
W (2408) mcpwm_test: Rx Loop
W (2408) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (2408) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (2418) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (2428) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (2438) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (2948) mcpwm_test: Rx Loop
W (2948) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (2948) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (2958) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (2968) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (2978) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
E (3378) mcpwm_test: Tx Loop
W (3488) mcpwm_test: Rx Loop
W (3488) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (3488) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (3498) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (3508) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (3518) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (4028) mcpwm_test: Rx Loop
E (4378) mcpwm_test: Tx Loop
W (4528) mcpwm_test: Rx Loop
W (4528) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (4528) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (4538) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (4548) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (4558) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (5068) mcpwm_test: Rx Loop
E (5378) mcpwm_test: Tx Loop
W (5568) mcpwm_test: Rx Loop
W (5568) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (5568) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (5578) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (5588) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (5598) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (6108) mcpwm_test: Rx Loop
E (6378) mcpwm_test: Tx Loop
W (6608) mcpwm_test: Rx Loop
W (6608) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (6608) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (6618) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (6628) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (6638) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (7148) mcpwm_test: Rx Loop
E (7378) mcpwm_test: Tx Loop
W (7648) mcpwm_test: Rx Loop
W (7648) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (7648) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (7658) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (7668) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (7678) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (8188) mcpwm_test: Rx Loop
E (8378) mcpwm_test: Tx Loop
W (8688) mcpwm_test: Rx Loop
W (8688) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (8688) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (8698) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (8708) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (8718) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (9228) mcpwm_test: Rx Loop
E (9378) mcpwm_test: Tx Loop
W (9728) mcpwm_test: Rx Loop
W (9728) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (9728) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (9738) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (9748) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (9758) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (10268) mcpwm_test: Rx Loop
E (10378) mcpwm_test: Tx Loop
W (10768) mcpwm_test: Rx Loop
W (10768) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (10768) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (10778) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (10788) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (10798) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (11308) mcpwm_test: Rx Loop
E (11378) mcpwm_test: Tx Loop
W (11808) mcpwm_test: Rx Loop
W (11808) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (11808) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (11818) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (11828) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (11838) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (12348) mcpwm_test: Rx Loop
E (12378) mcpwm_test: Tx Loop
W (12848) mcpwm_test: Rx Loop
W (12848) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (12848) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (12858) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (12868) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (12878) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
E (13378) mcpwm_test: Tx Loop
W (13388) mcpwm_test: Rx Loop
W (13388) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (13388) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (13398) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (13408) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (13418) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (13928) mcpwm_test: Rx Loop
E (14378) mcpwm_test: Tx Loop
W (14428) mcpwm_test: Rx Loop
W (14428) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (14428) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (14438) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (14448) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (14458) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (14968) mcpwm_test: Rx Loop
E (15378) mcpwm_test: Tx Loop
W (15468) mcpwm_test: Rx Loop
W (15468) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (15468) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (15478) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (15488) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (15498) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (16008) mcpwm_test: Rx Loop
E (16378) mcpwm_test: Tx Loop
W (16508) mcpwm_test: Rx Loop
W (16508) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (16508) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (16518) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (16528) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (16538) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (17048) mcpwm_test: Rx Loop
E (17378) mcpwm_test: Tx Loop
W (17548) mcpwm_test: Rx Loop
W (17548) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (17548) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (17558) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (17568) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (17578) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (18088) mcpwm_test: Rx Loop
E (18378) mcpwm_test: Tx Loop
W (18588) mcpwm_test: Rx Loop
W (18588) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (18588) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (18598) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (18608) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (18618) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (19128) mcpwm_test: Rx Loop
E (19378) mcpwm_test: Tx Loop
W (19628) mcpwm_test: Rx Loop
W (19628) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (19628) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (19638) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (19648) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (19658) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (20168) mcpwm_test: Rx Loop
E (20378) mcpwm_test: Tx Loop
W (20668) mcpwm_test: Rx Loop
W (20668) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (20668) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (20678) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (20688) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (20698) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (21208) mcpwm_test: Rx Loop
E (21378) mcpwm_test: Tx Loop
W (21708) mcpwm_test: Rx Loop
W (21708) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (21708) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (21718) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (21728) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (21738) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (22248) mcpwm_test: Rx Loop
E (22378) mcpwm_test: Tx Loop
W (22748) mcpwm_test: Rx Loop
W (22748) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (22748) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (22758) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (22768) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (22778) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (23288) mcpwm_test: Rx Loop
E (23378) mcpwm_test: Tx Loop
W (23788) mcpwm_test: Rx Loop
W (23788) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (23788) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (23798) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (23808) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (23818) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (24328) mcpwm_test: Rx Loop
E (24378) mcpwm_test: Tx Loop
W (24828) mcpwm_test: Rx Loop
W (24828) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (24828) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (24838) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (24848) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (24858) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (25368) mcpwm_test: Rx Loop
E (25378) mcpwm_test: Tx Loop
W (25868) mcpwm_test: Rx Loop
W (25868) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (25868) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (25878) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (25888) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (25898) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
E (26378) mcpwm_test: Tx Loop
W (26408) mcpwm_test: Rx Loop
W (26408) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (26408) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (26418) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (26428) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (26438) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (26948) mcpwm_test: Rx Loop
E (27378) mcpwm_test: Tx Loop
W (27448) mcpwm_test: Rx Loop
W (27448) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (27448) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (27458) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (27468) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (27478) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (27988) mcpwm_test: Rx Loop
E (28378) mcpwm_test: Tx Loop
W (28488) mcpwm_test: Rx Loop
W (28488) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (28488) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (28498) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (28508) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (28518) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (29028) mcpwm_test: Rx Loop
E (29378) mcpwm_test: Tx Loop
W (29528) mcpwm_test: Rx Loop
W (29528) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (29528) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (29538) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (29548) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (29558) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (30068) mcpwm_test: Rx Loop
E (30378) mcpwm_test: Tx Loop
W (30568) mcpwm_test: Rx Loop
W (30568) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (30568) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (30578) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (30588) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (30598) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (31108) mcpwm_test: Rx Loop
E (31378) mcpwm_test: Tx Loop
W (31608) mcpwm_test: Rx Loop
W (31608) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (31608) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (31618) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (31628) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (31638) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (32148) mcpwm_test: Rx Loop
E (32378) mcpwm_test: Tx Loop
W (32648) mcpwm_test: Rx Loop
W (32648) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (32648) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (32658) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (32668) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (32678) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (33188) mcpwm_test: Rx Loop
E (33378) mcpwm_test: Tx Loop
W (33688) mcpwm_test: Rx Loop
W (33688) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (33688) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (33698) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (33708) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (33718) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (34228) mcpwm_test: Rx Loop
E (34378) mcpwm_test: Tx Loop
W (34728) mcpwm_test: Rx Loop
W (34728) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (34728) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (34738) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (34748) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (34758) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (35268) mcpwm_test: Rx Loop
E (35378) mcpwm_test: Tx Loop
W (35768) mcpwm_test: Rx Loop
W (35768) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (35768) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (35778) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (35788) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (35798) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (36308) mcpwm_test: Rx Loop
E (36378) mcpwm_test: Tx Loop
W (36808) mcpwm_test: Rx Loop
W (36808) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (36808) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (36818) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (36828) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (36838) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (37348) mcpwm_test: Rx Loop
E (37378) mcpwm_test: Tx Loop
W (37848) mcpwm_test: Rx Loop
W (37848) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (37848) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (37858) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (37868) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (37878) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
E (38378) mcpwm_test: Tx Loop
W (38388) mcpwm_test: Rx Loop
W (38388) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (38388) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (38398) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (38408) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (38418) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (38928) mcpwm_test: Rx Loop
E (39378) mcpwm_test: Tx Loop
W (39428) mcpwm_test: Rx Loop
W (39428) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (39428) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (39438) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (39448) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (39458) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (39968) mcpwm_test: Rx Loop
E (40378) mcpwm_test: Tx Loop
W (40468) mcpwm_test: Rx Loop
W (40468) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (40468) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (40478) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (40488) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (40498) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (41008) mcpwm_test: Rx Loop
E (41378) mcpwm_test: Tx Loop
W (41508) mcpwm_test: Rx Loop
W (41508) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (41508) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (41518) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (41528) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (41538) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (42048) mcpwm_test: Rx Loop
E (42378) mcpwm_test: Tx Loop
W (42548) mcpwm_test: Rx Loop
W (42548) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (42548) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (42558) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (42568) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (42578) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (43088) mcpwm_test: Rx Loop
E (43378) mcpwm_test: Tx Loop
W (43588) mcpwm_test: Rx Loop
W (43588) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (43588) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (43598) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (43608) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (43618) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (44128) mcpwm_test: Rx Loop
E (44378) mcpwm_test: Tx Loop
W (44628) mcpwm_test: Rx Loop
W (44628) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (44628) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (44638) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (44648) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (44658) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (45168) mcpwm_test: Rx Loop
E (45378) mcpwm_test: Tx Loop
W (45668) mcpwm_test: Rx Loop
W (45668) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (45668) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (45678) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (45688) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (45698) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (46208) mcpwm_test: Rx Loop
E (46378) mcpwm_test: Tx Loop
W (46708) mcpwm_test: Rx Loop
W (46708) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (46708) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (46718) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (46728) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (46738) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (47248) mcpwm_test: Rx Loop
E (47378) mcpwm_test: Tx Loop
W (47748) mcpwm_test: Rx Loop
W (47748) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (47748) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (47758) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (47768) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (47778) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (48288) mcpwm_test: Rx Loop
E (48378) mcpwm_test: Tx Loop
W (48788) mcpwm_test: Rx Loop
W (48788) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (48788) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (48798) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (48808) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (48818) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (49328) mcpwm_test: Rx Loop
E (49378) mcpwm_test: Tx Loop
W (49828) mcpwm_test: Rx Loop
W (49828) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (49828) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (49838) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (49848) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (49858) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (50368) mcpwm_test: Rx Loop
E (50378) mcpwm_test: Tx Loop
W (50868) mcpwm_test: Rx Loop
W (50868) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (50868) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (50878) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (50888) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (50898) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
E (51378) mcpwm_test: Tx Loop
W (51408) mcpwm_test: Rx Loop
W (51408) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (51408) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (51418) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (51428) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (51438) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (51948) mcpwm_test: Rx Loop
E (52378) mcpwm_test: Tx Loop
W (52448) mcpwm_test: Rx Loop
W (52448) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (52448) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (52458) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (52468) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (52478) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (52988) mcpwm_test: Rx Loop
E (53378) mcpwm_test: Tx Loop
W (53488) mcpwm_test: Rx Loop
W (53488) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (53488) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (53498) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (53508) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (53518) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (54028) mcpwm_test: Rx Loop
E (54378) mcpwm_test: Tx Loop
W (54528) mcpwm_test: Rx Loop
W (54528) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (54528) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (54538) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (54548) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (54558) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (55068) mcpwm_test: Rx Loop
E (55378) mcpwm_test: Tx Loop
W (55568) mcpwm_test: Rx Loop
W (55568) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (55568) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (55578) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (55588) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (55598) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (56108) mcpwm_test: Rx Loop
E (56378) mcpwm_test: Tx Loop
W (56608) mcpwm_test: Rx Loop
W (56608) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (56608) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (56618) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (56628) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (56638) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (57148) mcpwm_test: Rx Loop
E (57378) mcpwm_test: Tx Loop
W (57648) mcpwm_test: Rx Loop
W (57648) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (57648) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (57658) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (57668) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (57678) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (58188) mcpwm_test: Rx Loop
E (58378) mcpwm_test: Tx Loop
W (58688) mcpwm_test: Rx Loop
W (58688) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (58688) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (58698) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (58708) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (58718) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (59228) mcpwm_test: Rx Loop
E (59378) mcpwm_test: Tx Loop
W (59728) mcpwm_test: Rx Loop
W (59728) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (59728) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (59738) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (59748) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (59758) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (60268) mcpwm_test: Rx Loop
E (60378) mcpwm_test: Tx Loop
W (60768) mcpwm_test: Rx Loop
W (60768) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (60768) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (60778) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (60788) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (60798) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (61308) mcpwm_test: Rx Loop
E (61378) mcpwm_test: Tx Loop
W (61808) mcpwm_test: Rx Loop
W (61808) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (61808) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (61818) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (61828) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (61838) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (62348) mcpwm_test: Rx Loop
E (62378) mcpwm_test: Tx Loop
W (62848) mcpwm_test: Rx Loop
W (62848) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (62848) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (62858) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (62868) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (62878) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
E (63378) mcpwm_test: Tx Loop
W (63388) mcpwm_test: Rx Loop
W (63388) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (63388) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (63398) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (63408) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (63418) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (63928) mcpwm_test: Rx Loop
E (64378) mcpwm_test: Tx Loop
W (64428) mcpwm_test: Rx Loop
W (64428) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (64428) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (64438) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (64448) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (64458) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (64968) mcpwm_test: Rx Loop
E (65378) mcpwm_test: Tx Loop
W (65468) mcpwm_test: Rx Loop
W (65468) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (65468) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (65478) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (65488) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (65498) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (66008) mcpwm_test: Rx Loop
E (66378) mcpwm_test: Tx Loop
W (66508) mcpwm_test: Rx Loop
W (66508) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (66508) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (66518) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (66528) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (66538) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (67048) mcpwm_test: Rx Loop
E (67378) mcpwm_test: Tx Loop
W (67548) mcpwm_test: Rx Loop
W (67548) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (67548) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (67558) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (67568) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (67578) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (68088) mcpwm_test: Rx Loop
E (68378) mcpwm_test: Tx Loop
W (68588) mcpwm_test: Rx Loop
W (68588) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (68588) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (68598) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (68608) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (68618) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (69128) mcpwm_test: Rx Loop
E (69378) mcpwm_test: Tx Loop
W (69628) mcpwm_test: Rx Loop
W (69628) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (69628) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (69638) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (69648) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (69658) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (70168) mcpwm_test: Rx Loop
E (70378) mcpwm_test: Tx Loop
W (70668) mcpwm_test: Rx Loop
W (70668) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (70668) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (70678) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (70688) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (70698) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (71208) mcpwm_test: Rx Loop
E (71378) mcpwm_test: Tx Loop
W (71708) mcpwm_test: Rx Loop
W (71708) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (71708) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (71718) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (71728) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (71738) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (72248) mcpwm_test: Rx Loop
E (72378) mcpwm_test: Tx Loop
W (72748) mcpwm_test: Rx Loop
W (72748) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (72748) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (72758) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (72768) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (72778) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (73288) mcpwm_test: Rx Loop
E (73378) mcpwm_test: Tx Loop
W (73788) mcpwm_test: Rx Loop
W (73788) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (73788) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (73798) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (73808) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (73818) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (74328) mcpwm_test: Rx Loop
E (74378) mcpwm_test: Tx Loop
W (74828) mcpwm_test: Rx Loop
W (74828) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (74828) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (74838) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (74848) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (74858) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (75368) mcpwm_test: Rx Loop
E (75378) mcpwm_test: Tx Loop
W (75868) mcpwm_test: Rx Loop
W (75868) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (75868) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (75878) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (75888) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (75898) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
E (76378) mcpwm_test: Tx Loop
W (76408) mcpwm_test: Rx Loop
W (76408) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (76408) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (76418) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (76428) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (76438) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (76948) mcpwm_test: Rx Loop
E (77378) mcpwm_test: Tx Loop
W (77448) mcpwm_test: Rx Loop
W (77448) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (77448) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (77458) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (77468) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (77478) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (77988) mcpwm_test: Rx Loop
E (78378) mcpwm_test: Tx Loop
W (78488) mcpwm_test: Rx Loop
W (78488) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (78488) mcpwm_test: level0 = High   dur0 = PulseTicks(620)   level1 = Low   dur1 = PulseTicks(620)
W (78498) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(410)
W (78508) mcpwm_test: level0 = High   dur0 = PulseTicks(410)   level1 = Low   dur1 = PulseTicks(210)
W (78518) mcpwm_test: level0 = High   dur0 = PulseTicks(210)   level1 = Low   dur1 = PulseTicks(0)
W (79028) mcpwm_test: Rx Loop

enelson1001 avatar Jul 25 '22 17:07 enelson1001

@MabezDev I think you are following the development of RMT and mcpwm. Would you like to review this and #93 and merge when you think this stuff is in a good shape?

ivmarkov avatar Aug 04 '22 07:08 ivmarkov

Can someone explain what the Clippy errors mean.

enelson1001 avatar Aug 04 '22 17:08 enelson1001

Can someone explain what the Clippy errors mean.

CI was stuck on an old nightly which broke libc, its now fixed with this commit in master https://github.com/esp-rs/esp-idf-hal/commit/5edffdac61bdd29bbb0bf1dd9f929bb94fc742f5. If you rebase this branch on top of master it should fix the errors :).

MabezDev avatar Aug 05 '22 11:08 MabezDev

I am getting build errors that I do not understand why they are happening. These occur in the example file rmt_transceiver.rs

error[E0432]: unresolved import `log`
  --> examples/rmt_transceiver.rs:23:5
   |
23 | use log::*;
   |     ^^^ use of undeclared crate or module `log`

error: cannot find macro `error` in this scope
  --> examples/rmt_transceiver.rs:94:9
   |
94 |         error!("Tx Loop");
   |         ^^^^^

error: cannot find macro `warn` in this scope
  --> examples/rmt_transceiver.rs:61:17
   |
61 |                 warn!(
   |                 ^^^^
   |
   = note: `warn` is in scope, but it is an attribute: `#[warn]`

error: cannot find macro `warn` in this scope
  --> examples/rmt_transceiver.rs:52:9
   |
52 |         warn!("Rx Loop");
   |         ^^^^
   |
   = note: `warn` is in scope, but it is an attribute: `#[warn]`

error: cannot find macro `info` in this scope
  --> examples/rmt_transceiver.rs:38:5
   |
38 |     info!("Starting APP!");
   |     ^^^^

error[E0433]: failed to resolve: use of undeclared crate or module `esp_idf_svc`
  --> examples/rmt_transceiver.rs:36:5
   |
36 |     esp_idf_svc::log::EspLogger::initialize_default();
   |     ^^^^^^^^^^^ use of undeclared crate or module `esp_idf_svc`
   |
help: there is a crate or module with a similar name
   |
36 |     esp_idf_sys::log::EspLogger::initialize_default();
   |     ~~~~~~~~~~~

Is there some reason we can't use log in examples?

enelson1001 avatar Aug 30 '22 14:08 enelson1001

I am getting build errors that I do not understand why they are happening. These occur in the example file rmt_transceiver.rs

error[E0432]: unresolved import `log`
  --> examples/rmt_transceiver.rs:23:5
   |
23 | use log::*;
   |     ^^^ use of undeclared crate or module `log`

error: cannot find macro `error` in this scope
  --> examples/rmt_transceiver.rs:94:9
   |
94 |         error!("Tx Loop");
   |         ^^^^^

error: cannot find macro `warn` in this scope
  --> examples/rmt_transceiver.rs:61:17
   |
61 |                 warn!(
   |                 ^^^^
   |
   = note: `warn` is in scope, but it is an attribute: `#[warn]`

error: cannot find macro `warn` in this scope
  --> examples/rmt_transceiver.rs:52:9
   |
52 |         warn!("Rx Loop");
   |         ^^^^
   |
   = note: `warn` is in scope, but it is an attribute: `#[warn]`

error: cannot find macro `info` in this scope
  --> examples/rmt_transceiver.rs:38:5
   |
38 |     info!("Starting APP!");
   |     ^^^^

error[E0433]: failed to resolve: use of undeclared crate or module `esp_idf_svc`
  --> examples/rmt_transceiver.rs:36:5
   |
36 |     esp_idf_svc::log::EspLogger::initialize_default();
   |     ^^^^^^^^^^^ use of undeclared crate or module `esp_idf_svc`
   |
help: there is a crate or module with a similar name
   |
36 |     esp_idf_sys::log::EspLogger::initialize_default();
   |     ~~~~~~~~~~~

Is there some reason we can't use log in examples?

Too long to explain... :( please use println!

ivmarkov avatar Sep 11 '22 11:09 ivmarkov

Would it be possible to rebase this PR for latest master? I just merged next into it so there are lots of changes.

ivmarkov avatar Sep 18 '22 11:09 ivmarkov

It looks like a lot of changes to rmt.rs I am curious why TransmitConfig was changed to Config. It seemed to be an appropriate name since there is a transmit config and a receive config for the RMT I was implementing ReceiveConfig for the receiver. Should I keep ReceiveConfig or do you have something else in mind.

enelson1001 avatar Sep 22 '22 00:09 enelson1001

It looks like a lot of changes to rmt.rs I am curious why TransmitConfig was changed to Config. It seemed to be an appropriate name since there is a transmit config and a receive config for the RMT I was implementing ReceiveConfig for the receiver. Should I keep ReceiveConfig or do you have something else in mind.

By all means keep ReceiveConfig as it is. I've renamed Config back to TransmitConfig. With all the changes, it escaped my mind completely, that the receiver part is coming. :)

Do you think you could rebase your changes on top of latest master? The previous release I've kept in a separate branch, but I don't have the time to push into it new functionality. It is only there for bugfixes that would fix crashes and other gross errors.

ivmarkov avatar Sep 22 '22 06:09 ivmarkov

@enelson1001 The PR is still reported as having conflicts by github.

ivmarkov avatar Sep 27 '22 15:09 ivmarkov

Latest error looks like a dodgy rebase, could you take a look @enelson1001?

MabezDev avatar Sep 30 '22 13:09 MabezDev

Looks like we now have the following - line 177

pub type RmtConfig = config::TransmitConfig;

Should this be renamed to TxRmtConfig and also implement RxRmtConfig for receiver

pub type TxRmtConfig = config::TransmitConfig;
pub type RxRmtConfig = config::ReceiveConfig;

drop has been implemented tor transmit, receive has release.

Should the following implementation in transmit be implemented in receive instead of receive release function?

impl<'d, C: RmtChannel> Drop for RmtDriver<'d, C> {
    /// Stop transmitting and release the driver.
    fn drop(&mut self) {
        self.stop().unwrap();
        esp!(unsafe { rmt_driver_uninstall(C::channel()) }).unwrap();
    }
}

unsafe impl<'d, C: RmtChannel> Send for RmtDriver<'d, C> {}

enelson1001 avatar Oct 04 '22 09:10 enelson1001

Looks like we now have the following - line 177

pub type RmtConfig = config::TransmitConfig;

Should this be renamed to TxRmtConfig and also implement RxRmtConfig for receiver

pub type TxRmtConfig = config::TransmitConfig;
pub type RxRmtConfig = config::ReceiveConfig;

drop has been implemented tor transmit, receive has release.

Should the following implementation in transmit be implemented in receive instead of receive release function?

impl<'d, C: RmtChannel> Drop for RmtDriver<'d, C> {
    /// Stop transmitting and release the driver.
    fn drop(&mut self) {
        self.stop().unwrap();
        esp!(unsafe { rmt_driver_uninstall(C::channel()) }).unwrap();
    }
}

unsafe impl<'d, C: RmtChannel> Send for RmtDriver<'d, C> {}

Yes to both.

ivmarkov avatar Oct 04 '22 09:10 ivmarkov

Should the rmt examples use

use esp_idf_hal::rmt::TxRmtConfig;

Instead of the following?

use esp_idf_hal::rmt::config::TransmitConfig;

enelson1001 avatar Oct 06 '22 03:10 enelson1001

Should the rmt examples use

use esp_idf_hal::rmt::TxRmtConfig;

Instead of the following?

use esp_idf_hal::rmt::config::TransmitConfig;

Not so important, both symbols are public.

ivmarkov avatar Oct 06 '22 04:10 ivmarkov

I am stuck and can't figure out how to resolve these Clippy errors. I used transmitter code as an example but for some reason the same code does not work in receiver. I am using InputPin instead of OutputPin

Any ideas how to resolve these two errors?

MY CODE
/// The RMT receiver.
///
/// Use [`RxRmtDriver::start()`] to receive pulses.
///
/// See the [rmt module][crate::rmt] for more information.
#[cfg(feature = "std")]
use std::convert::TryInto;

use self::config::ReceiveConfig;

//#[derive(Clone, Default)]
#[cfg(feature = "alloc")]

pub struct RxRmtDriver<'d, C: RmtChannel> {
    _channel: PeripheralRef<'d, C>,
    pub pulse_pair_vec: Vec<PulsePair>,
}

#[cfg(feature = "alloc")]
impl<'d, C: RmtChannel> RxRmtDriver<'d, C> {
    /// Initialise the rmt module with the specified pin, channel and configuration.
    ///
    /// To uninstall the driver just drop it.
    ///
    /// Internally this calls `rmt_config()` and `rmt_driver_install()`.

    pub fn new(
        channel: impl Peripheral<P = C> + 'd,
        pin: impl Peripheral<P = impl InputPin> + 'd,    <------------------ CLIPPY ERROR HERE
        config: &ReceiveConfig,
        rx_buffer_size_in_bytes: u32,
    ) -> Result<Self, EspError> {
        let flags = 0;

        #[cfg(not(any(esp32, esp32c2)))]
        let carrier_en = config.carrier.is_some();

        #[cfg(not(any(esp32, esp32c2)))]
        let carrier = config.carrier.unwrap_or_default();

        let sys_config = rmt_config_t {
            rmt_mode: rmt_mode_t_RMT_MODE_RX,
            channel: C::channel(),
            gpio_num: pin.pin(),
            clk_div: config.clock_divider,
            mem_block_num: config.mem_block_num,
            flags,
            __bindgen_anon_1: rmt_config_t__bindgen_ty_1 {
                rx_config: rmt_rx_config_t {
                    idle_threshold: config.idle_threshold,
                    filter_ticks_thresh: config.filter_ticks_thresh,
                    filter_en: config.filter_en,
                    #[cfg(not(any(esp32, esp32c2)))]
                    rm_carrier: carrier_en,
                    #[cfg(not(any(esp32, esp32c2)))]
                    carrier_freq_hz: carrier.frequency.into(),
                    #[cfg(not(any(esp32, esp32c2)))]
                    carrier_level: carrier.carrier_level as u32,
                    #[cfg(not(any(esp32, esp32c2)))]
                    carrier_duty_percent: carrier.duty_percent.0,
                },
            },
        };

        let pulse_pair_size: u32 = rx_buffer_size_in_bytes / 4;
        let pulse_pair_vec: Vec<PulsePair> =
            Vec::with_capacity(pulse_pair_size.try_into().unwrap());

        unsafe {
            esp!(rmt_config(&sys_config))?;
            esp!(rmt_driver_install(C::channel(), rx_buffer_size_in_bytes, 0))?;
        }

        Ok(Self {
            _channel: channel,                          <--------- CLIPPY ERROR HERE
            pulse_pair_vec,
        })
    }

The Clippy Errors

Compiling esp-idf-hal v0.39.0 (/home/ed/esp-idf-hal/esp-idf-hal)
error[E0599]: no method named `pin` found for type parameter `impl Peripheral<P = impl InputPin> + 'd` in the current scope
   --> src/rmt.rs:956:27
    |
941 |         pin: impl Peripheral<P = impl InputPin> + 'd,
    |              --------------------------------------- method `pin` not found for this type parameter
...
956 |             gpio_num: pin.pin(),
    |                           ^^^ method not found in `impl Peripheral<P = impl InputPin> + 'd`
    |
    = help: items from traits can only be used if the type parameter is bounded by the trait
help: the following trait defines an item `pin`, perhaps you need to restrict type parameter `impl Peripheral<P = impl InputPin> + 'd` with it:
    |
941 |         pin: impl Peripheral<P = impl InputPin> + 'd + gpio::Pin,
    |                                                      +++++++++++

error[E0308]: mismatched types
   --> src/rmt.rs:987:23
    |
940 |         channel: impl Peripheral<P = C> + 'd,
    |                  --------------------------- this type parameter
...
987 |             _channel: channel,
    |                       ^^^^^^^ expected struct `peripheral::PeripheralRef`, found type parameter `impl Peripheral<P = C> + 'd`
    |
    = note:      expected struct `peripheral::PeripheralRef<'d, C>`
            found type parameter `impl Peripheral<P = C> + 'd`

Some errors have detailed explanations: E0308, E0599.
For more information about an error, try `rustc --explain E0308`.
error: could not compile `esp-idf-hal` due to 2 previous errors

enelson1001 avatar Oct 07 '22 14:10 enelson1001

These are easy. And by the way these are compilation errors, not Clippy lints. Just use the into_ref! macro. Search the esp-idf-hal to see how it is used in the other drivers.

ivmarkov avatar Oct 07 '22 15:10 ivmarkov

When I run this command

$ export ESP_IDF_VERSION=release/v4.4; export ESP_IDF_SDKCONFIG_DEFAULTS=$(pwd)/.github/configs/sdkconfig.defaults; cargo build --features esp-idf-sys/native --no-default-features --target riscv32imc-esp-espidf -Zbuild-std=std,panic_abort -Zbuild-std-features=panic_immediate_abort

I am getting the following errors

ed@ed-ideacentre-AIO-910-27ISH:~/esp-idf-hal/esp-idf-hal$ export ESP_IDF_VERSION=release/v4.4; export ESP_IDF_SDKCONFIG_DEFAULTS=$(pwd)/.github/configs/sdkconfig.defaults; cargo build --features esp-idf-sys/native --no-default-features --target riscv32imc-esp-espidf -Zbuild-std=std,panic_abort -Zbuild-std-features=panic_immediate_abort
   Compiling esp-idf-hal v0.39.0 (/home/ed/esp-idf-hal/esp-idf-hal)
error[E0412]: cannot find type `Vec` in this scope
   --> src/rmt.rs:928:25
    |
928 |     pub pulse_pair_vec: Vec<PulsePair>,
    |                         ^^^ not found in this scope
    |
help: consider importing this struct
    |
54  | use heapless::Vec;
    |

error[E0412]: cannot find type `Vec` in this scope
   --> src/rmt.rs:979:29
    |
979 |         let pulse_pair_vec: Vec<PulsePair> =
    |                             ^^^ not found in this scope
    |
help: consider importing this struct
    |
54  | use heapless::Vec;
    |

error[E0433]: failed to resolve: use of undeclared type `Vec`
   --> src/rmt.rs:980:13
    |
980 |             Vec::with_capacity(pulse_pair_size.try_into().unwrap());
    |             ^^^ not found in this scope
    |
help: consider importing this struct
    |
54  | use heapless::Vec;
    |

Some errors have detailed explanations: E0412, E0433.
For more information about an error, try `rustc --explain E0412`.
error: could not compile `esp-idf-hal` due to 3 previous errors

If I add the following (since I want to use the heap) then the errors go away

/// The RMT receiver.
///
/// Use [`RxRmtDriver::start()`] to receive pulses.
///
/// See the [rmt module][crate::rmt] for more information.
extern crate alloc;                                         -----------------------------------> ADDED THIS LINE
use alloc::vec::Vec;                                       -----------------------------------> ADDED THIS LINE
use self::config::ReceiveConfig;
use core::convert::TryInto;
use core::ptr;

pub struct RxRmtDriver<'d, C: RmtChannel> {
    _channel: PeripheralRef<'d, C>,
    pub pulse_pair_vec: Vec<PulsePair>,
}

But then when I run

$ cargo clippy --no-deps --target riscv32imc-esp-espidf -Zbuild-std=std,panic_abort -Zbuild-std-features=panic_immediate_abort -- -Dwarnings

I am getting these errors

Compiling esp-idf-hal v0.39.0 (/home/ed/esp-idf-hal/esp-idf-hal)
error[E0259]: the name `alloc` is defined multiple times
   --> src/rmt.rs:919:1
    |
58  | extern crate alloc;
    | ------------------- previous import of the extern crate `alloc` here
...
919 | extern crate alloc;
    | ^^^^^^^^^^^^^^^^^^^ `alloc` reimported here
    |
    = note: `alloc` must be defined only once in the type namespace of this module

error[E0252]: the name `Vec` is defined multiple times
   --> src/rmt.rs:921:5
    |
61  | use alloc::vec::Vec;
    |     --------------- previous import of the type `Vec` here
...
921 | use alloc::vec::Vec;
    |     ^^^^^^^^^^^^^^^ `Vec` reimported here
    |
    = note: `Vec` must be defined only once in the type namespace of this module

error: unused import: `alloc::vec::Vec`
   --> src/rmt.rs:921:5
    |
921 | use alloc::vec::Vec;
    |     ^^^^^^^^^^^^^^^
    |
    = note: `-D unused-imports` implied by `-D warnings`

Some errors have detailed explanations: E0252, E0259.
For more information about an error, try `rustc --explain E0252`.
error: could not compile `esp-idf-hal` due to 3 previous errors

What is the correct way to fix "Vec not found in this scope"

enelson1001 avatar Oct 18 '22 20:10 enelson1001

I am getting the following error when I try to use esp--idf-hal in a simple project. I have run rustup update but that did not help.
Is there some other update that I need to do?

error[E0658]: deriving `Default` on enums is experimental
   --> /home/ed/esp-idf-hal/esp-idf-hal/src/ledc.rs:460:49
    |
460 |     #[derive(PartialEq, Eq, Copy, Clone, Debug, Default)]
    |                                                 ^^^^^^^
    |
    = note: see issue #86985 <https://github.com/rust-lang/rust/issues/86985> for more information
    = help: add `#![feature(derive_default_enum)]` to the crate attributes to enable
    = note: this error originates in the derive macro `Default` (in Nightly builds, run with -Z macro-backtrace for more info)

For more information about this error, try `rustc --explain E0658`.
error: could not compile `esp-idf-hal` due to previous error
warning: build failed, waiting for other jobs to finish...

enelson1001 avatar Nov 03 '22 14:11 enelson1001

Rustup won't update the Xtensa enabled compiler, you'll have to update that manually from here: https://github.com/esp-rs/rust-build/releases/tag/v1.65.0.0

MabezDev avatar Nov 03 '22 15:11 MabezDev

I am getting the following error when I try to use esp--idf-hal in a simple project. I have run rustup update but that did not help. Is there some other update that I need to do?

This is a regression from yesterday. I'll fix ASAP.

ivmarkov avatar Nov 03 '22 15:11 ivmarkov

Fixed in master.

ivmarkov avatar Nov 03 '22 18:11 ivmarkov

I have been playing some more with the RMT Receiver and I think I would like to change PulsePair duration0 and duration1 to u16 types. I need the duration value from PulslePair not PulseTicks ( I cannot get the 0 field of PulseTicks because it is private).

In my example I need to compare duration0 and duration1 so the duration's are between a minimum value and a maximum value.

 New PulsePair



pub struct PulsePair {
    pub level0: PinState,
    pub duration0: u16,
    pub level1: PinState,
    pub duration1: u16,
}

impl PulsePair {
    pub fn new(lvl0: u32, dur0: u32, lvl1: u32, dur1: u32) -> Self {
        let level0 = match lvl0 {
            0 => PinState::Low,
            _ => PinState::High,
        };

        let duration0 = dur0 as u16;

        let level1 = match lvl1 {
            0 => PinState::Low,
            _ => PinState::High,
        };

        let duration1 = dur1 as u16;

        PulsePair {
            level0,
            duration0,
            level1,
            duration1,
        }
    }
}

My partial example

 const SHORT_PULSE_MIN: u16 = 196;
 const SHORT_PULSE_MAX: u16 = 244;

/*
     *********************** SET UP RMT RECEIVER ******************************
     */
    let input_pin = peripherals.pins.gpio2;
    //let input_pin = peripherals.pins.gpio36;
    let rx_rmt_channel: CHANNEL2 = peripherals.rmt.channel2;
    let rx_config = ReceiveConfig::new().idle_threshold(700u16);
    let mut rx = RxRmtDriver::new(rx_rmt_channel, input_pin, &rx_config, 1000)?;
    let _rx_start = rx.start().unwrap();

    let _receive_task = thread::spawn(move || loop {
        //println!("Rx Loop");

        // See sdkconfig.defaults to determine the tick time value ( default is one tick = 10 milliseconds)
        // Set ticks_to_wait to 0 for non-blocking
        let ticks_to_wait = 0;
        let length = rx.get_rmt_items(ticks_to_wait).unwrap();
        let mut sync_count: u8 = 0;
        let mut sync_found = false;

        if length != 0 {
            for n in 0..length / 4 {
                
                let lo_time = rx.pulse_pair_vec[n as usize].duration0;

                let hi_time = rx.pulse_pair_vec[n as usize].duration1;
                

                let is_lo_time_sync_pulse = (lo_time > SYNC_PULSE_MIN) & (lo_time < SYNC_PULSE_MAX);
                let is_hi_time_sync_pulse = (hi_time > SYNC_PULSE_MIN) & (hi_time < SYNC_PULSE_MAX);

Is this the correct way to go or is there a better way?

enelson1001 avatar Nov 04 '22 22:11 enelson1001

I am testing latest master (I think). In my project Cargo.toml i have the following.

[dependencies]
esp-idf-sys = { version = "0.31.9", features = ["binstart"] }
esp-idf-hal = { git = "https://github.com/esp-rs/esp-idf-hal" }
crossbeam-channel = "0.5"

But when I try and compile I get the following error (I am not using SPI at the moment)

error[E0632]: cannot provide explicit generic arguments when `impl Trait` is used in argument position
   --> /home/ed/.cargo/git/checkouts/esp-idf-hal-923d08f725716f5e/5667be9/src/spi.rs:361:54
    |
361 |         let max_transfer_size = Self::new_internal::<SPI1>(sclk, sdo, sdi, dma)?;
    |                                                      ^^^^ explicit generic argument not allowed
    |
    = note: see issue #83701 <https://github.com/rust-lang/rust/issues/83701> for more information
    = help: add `#![feature(explicit_generic_args_with_impl_trait)]` to the crate attributes to enable

error[E0632]: cannot provide explicit generic arguments when `impl Trait` is used in argument position
   --> /home/ed/.cargo/git/checkouts/esp-idf-hal-923d08f725716f5e/5667be9/src/spi.rs:377:54
    |
377 |         let max_transfer_size = Self::new_internal::<SPI>(sclk, sdo, sdi, dma)?;
    |                                                      ^^^ explicit generic argument not allowed
    |
    = note: see issue #83701 <https://github.com/rust-lang/rust/issues/83701> for more information
    = help: add `#![feature(explicit_generic_args_with_impl_trait)]` to the crate attributes to enable

For more information about this error, try `rustc --explain E0632`.
error: could not compile `esp-idf-hal` due to 2 previous errors

First question: With the Caro.toml file set as stated above, Am I using the latest MASTER?

Second question: Do you see this error on your builds?

enelson1001 avatar Nov 12 '22 18:11 enelson1001

And thanks for finishing the RMT receive. It would have taken me another month, probably more to implement the changes you made. I still have a lot to learn.

enelson1001 avatar Nov 12 '22 19:11 enelson1001

First question: With the Caro.toml file set as stated above, Am I using the latest MASTER?

Yes.

Second question: Do you see this error on your builds?

No. You are seeing this because your toolchain is too old. With that said, I'll remove the turbofish when calling internal_new as it is not actually necessary.

ivmarkov avatar Nov 13 '22 09:11 ivmarkov

And thanks for finishing the RMT receive. It would have taken me another month, probably more to implement the changes you made. I still have a lot to learn.

I would appreciate if you test the changed code though. I don't have a setup for testing the RMT stuff.

ivmarkov avatar Nov 13 '22 09:11 ivmarkov