void SetMTX2Frequency(char *FrequencyString) { float _mtx2comp; int _mtx2int; long _mtx2fractional; char _mtx2command[17]; int fd; double Frequency; int i, pulses, wave_id; char *str; if (strlen(FrequencyString) < 3) { // Convert channel number to frequency Frequency = strtol(FrequencyString, NULL, 16) * 0.003125 + 434.05; printf("Channel %s\n", FrequencyString); } else { Frequency = atof(FrequencyString); printf("Frequency %s\n", FrequencyString); } printf("MTX2 Frequency to be set to %8.4fMHz\n", Frequency); _mtx2comp=(Frequency+0.0015)/6.5; _mtx2int=_mtx2comp; _mtx2fractional = ((_mtx2comp-_mtx2int)+1) * 524288; snprintf(_mtx2command,17,"@PRG_%02X%06lX\r",_mtx2int-1, _mtx2fractional); printf("MTX2 command is %s\n", _mtx2command); if (gpioInitialise() < 0) { printf("pigpio initialisation failed.\n"); return; } gpioSetMode(NTX2B_ENABLE_BCM, PI_OUTPUT); gpioWaveAddNew(); gpioWaveAddSerial(NTX2B_ENABLE_BCM, 9600, 8, 2, 0, strlen(_mtx2command), _mtx2command); wave_id = gpioWaveCreate(); if (wave_id >= 0) { gpioWaveTxSend(wave_id, 0); while (gpioWaveTxBusy()) { time_sleep(0.1); } } gpioTerminate(); }
int main(int argc, char *argv[]) { int i, rest, g, wave_id, mode; gpioPulse_t pulse[2]; int count[MAX_GPIOS]; /* command line parameters */ rest = initOpts(argc, argv); /* get the gpios to monitor */ g_num_gpios = 0; for (i=rest; i<argc; i++) { g = atoi(argv[i]); if ((g>=0) && (g<32)) { g_gpio[g_num_gpios++] = g; g_mask |= (1<<g); } else fatal(1, "%d is not a valid g_gpio number\n", g); } if (!g_num_gpios) fatal(1, "At least one gpio must be specified"); printf("Monitoring gpios"); for (i=0; i<g_num_gpios; i++) printf(" %d", g_gpio[i]); printf("\nSample rate %d micros, refresh rate %d deciseconds\n", g_opt_s, g_opt_r); gpioCfgClock(g_opt_s, 1, 1); if (gpioInitialise()<0) return 1; gpioWaveClear(); pulse[0].gpioOn = g_mask; pulse[0].gpioOff = 0; pulse[0].usDelay = g_opt_p; pulse[1].gpioOn = 0; pulse[1].gpioOff = g_mask; pulse[1].usDelay = g_opt_p; gpioWaveAddGeneric(2, pulse); wave_id = gpioWaveCreate(); /* monitor g_gpio level changes */ gpioSetGetSamplesFunc(samples, g_mask); mode = PI_INPUT; if (g_opt_t) { gpioWaveTxSend(wave_id, PI_WAVE_MODE_REPEAT); mode = PI_OUTPUT; } for (i=0; i<g_num_gpios; i++) gpioSetMode(g_gpio[i], mode); while (1) { for (i=0; i<g_num_gpios; i++) count[i] = g_pulse_count[i]; g_reset_counts = 1; for (i=0; i<g_num_gpios; i++) { printf(" %d=%d", g_gpio[i], count[i]); } printf("\n"); gpioDelay(g_opt_r * 100000); } gpioTerminate(); }