void t2() { int f, r, rr, oc; printf("PWM dutycycle/range/frequency tests.\n"); set_PWM_range(GPIO, 255); set_PWM_frequency(GPIO, 0); f = get_PWM_frequency(GPIO); CHECK(2, 1, f, 10, 0, "set PWM range, set/get PWM frequency"); callback(GPIO, EITHER_EDGE, t2cb); set_PWM_dutycycle(GPIO, 0); time_sleep(0.5); /* allow old notifications to flush */ oc = t2_count; time_sleep(2); f = t2_count - oc; CHECK(2, 2, f, 0, 0, "set PWM dutycycle, callback"); set_PWM_dutycycle(GPIO, 128); oc = t2_count; time_sleep(2); f = t2_count - oc; CHECK(2, 3, f, 40, 5, "set PWM dutycycle, callback"); set_PWM_frequency(GPIO, 100); f = get_PWM_frequency(GPIO); CHECK(2, 4, f, 100, 0, "set/get PWM frequency"); oc = t2_count; time_sleep(2); f = t2_count - oc; CHECK(2, 5, f, 400, 1, "callback"); set_PWM_frequency(GPIO, 1000); f = get_PWM_frequency(GPIO); CHECK(2, 6, f, 1000, 0, "set/get PWM frequency"); oc = t2_count; time_sleep(2); f = t2_count - oc; CHECK(2, 7, f, 4000, 1, "callback"); r = get_PWM_range(GPIO); CHECK(2, 8, r, 255, 0, "get PWM range"); rr = get_PWM_real_range(GPIO); CHECK(2, 9, rr, 200, 0, "get PWM real range"); set_PWM_range(GPIO, 2000); r = get_PWM_range(GPIO); CHECK(2, 10, r, 2000, 0, "set/get PWM range"); rr = get_PWM_real_range(GPIO); CHECK(2, 11, rr, 200, 0, "get PWM real range"); set_PWM_dutycycle(GPIO, 0); }
void t3(int pi) { int pw[3]={500, 1500, 2500}; int dc[4]={20, 40, 60, 80}; int f, rr, v; float on, off; int t, id; printf("PWM/Servo pulse accuracy tests.\n"); id = callback(pi, GPIO, EITHER_EDGE, t3cbf); for (t=0; t<3; t++) { set_servo_pulsewidth(pi, GPIO, pw[t]); v = get_servo_pulsewidth(pi, GPIO); CHECK(3, t+t+1, v, pw[t], 0, "get servo pulsewidth"); time_sleep(1); t3_reset = 1; time_sleep(4); on = t3_on; off = t3_off; CHECK(3, t+t+2, (1000.0*(on+off))/on, 20000000.0/pw[t], 1, "set servo pulsewidth"); } set_servo_pulsewidth(pi, GPIO, 0); set_PWM_frequency(pi, GPIO, 1000); f = get_PWM_frequency(pi, GPIO); CHECK(3, 7, f, 1000, 0, "set/get PWM frequency"); rr = set_PWM_range(pi, GPIO, 100); CHECK(3, 8, rr, 200, 0, "set PWM range"); for (t=0; t<4; t++) { set_PWM_dutycycle(pi, GPIO, dc[t]); v = get_PWM_dutycycle(pi, GPIO); CHECK(3, t+t+9, v, dc[t], 0, "get PWM dutycycle"); time_sleep(1); t3_reset = 1; time_sleep(2); on = t3_on; off = t3_off; CHECK(3, t+t+10, (1000.0*on)/(on+off), 10.0*dc[t], 1, "set PWM dutycycle"); } set_PWM_dutycycle(pi, GPIO, 0); callback_cancel(id); }
void t3() { int pw[3]={500, 1500, 2500}; int dc[4]={20, 40, 60, 80}; int f, rr; float on, off; int t; printf("PWM/Servo pulse accuracy tests.\n"); callback(GPIO, EITHER_EDGE, t3cbf); for (t=0; t<3; t++) { set_servo_pulsewidth(GPIO, pw[t]); time_sleep(1); t3_reset = 1; time_sleep(4); on = t3_on; off = t3_off; CHECK(3, 1+t, (1000.0*(on+off))/on, 20000000.0/pw[t], 1, "set servo pulsewidth"); } set_servo_pulsewidth(GPIO, 0); set_PWM_frequency(GPIO, 1000); f = get_PWM_frequency(GPIO); CHECK(3, 4, f, 1000, 0, "set/get PWM frequency"); rr = set_PWM_range(GPIO, 100); CHECK(3, 5, rr, 200, 0, "set PWM range"); for (t=0; t<4; t++) { set_PWM_dutycycle(GPIO, dc[t]); time_sleep(1); t3_reset = 1; time_sleep(2); on = t3_on; off = t3_off; CHECK(3, 6+t, (1000.0*on)/(on+off), 10.0*dc[t], 1, "set PWM dutycycle"); } set_PWM_dutycycle(GPIO, 0); }
void PWMNode::frameEnd( qint64 pTimestamp ) { #if defined( PIGPIO_SUPPORTED ) const int PigPio = RaspberryPiPlugin::instance()->piIndex(); for( QSharedPointer<fugio::PinInterface> P : mNode->enumInputPins() ) { quint16 PId = P->name().toInt(); if( P->updated() < pTimestamp ) { continue; } int Val = variant( P ).toInt(); set_PWM_dutycycle( PigPio, PId, qBound( 0, Val, 255 ) ); } #endif }
void t4() { int h, e, f, n, s, b, l, seq_ok, toggle_ok; gpioReport_t r; char p[32]; printf("Pipe notification tests.\n"); set_PWM_frequency(GPIO, 0); set_PWM_dutycycle(GPIO, 0); set_PWM_range(GPIO, 100); h = notify_open(); e = notify_begin(h, (1<<4)); CHECK(4, 1, e, 0, 0, "notify open/begin"); time_sleep(1); sprintf(p, "/dev/pigpio%d", h); f = open(p, O_RDONLY); set_PWM_dutycycle(GPIO, 50); time_sleep(4); set_PWM_dutycycle(GPIO, 0); e = notify_pause(h); CHECK(4, 2, e, 0, 0, "notify pause"); e = notify_close(h); CHECK(4, 3, e, 0, 0, "notify close"); n = 0; s = 0; l = 0; seq_ok = 1; toggle_ok = 1; while (1) { b = read(f, &r, 12); if (b == 12) { if (s != r.seqno) seq_ok = 0; if (n) if (l != (r.level&(1<<4))) toggle_ok = 0; if (r.level&(1<<4)) l = 0; else l = (1<<4); s++; n++; // printf("%d %d %d %X\n", r.seqno, r.flags, r.tick, r.level); } else break; } close(f); CHECK(4, 4, seq_ok, 1, 0, "sequence numbers ok"); CHECK(4, 5, toggle_ok, 1, 0, "gpio toggled ok"); CHECK(4, 6, n, 80, 10, "number of notifications"); }