void tl_hdhr_playback_manager_stop_streaming(TLHDHRPlaybackManager *self) { g_assert(self != NULL); hdhomerun_device_set_tuner_target(self->priv->playback_device, "none"); hdhomerun_device_tuner_lockkey_release(self->priv->playback_device); self->priv->playback_device = NULL; }
void py_device_dealloc(py_device_object *self) { if(self->locked != 0) { /* Try to unlock the tuner, ignore errors */ hdhomerun_device_tuner_lockkey_release(self->hd); self->locked = 0; } hdhomerun_device_destroy(self->hd); self->hd = NULL; self->ob_type->tp_free((PyObject*)self); }
PyObject *py_device_tuner_lockkey_release(py_device_object *self) { int success; success = hdhomerun_device_tuner_lockkey_release(self->hd); if(success == -1) { PyErr_SetString(PyExc_IOError, DEVICE_ERR_COMMUNICATION); return NULL; } else if(success == 0) { PyErr_SetString(hdhomerun_device_error, "the device rejected the unlock request"); return NULL; } else if(success == 1) { self->locked = 0; } else { PyErr_SetString(hdhomerun_device_error, DEVICE_ERR_UNDOCUMENTED); return NULL; } Py_RETURN_NONE; }
static int cmd_scan(const char *tuner_str, const char *filename) { if (hdhomerun_device_set_tuner_from_str(hd, tuner_str) <= 0) { fprintf(stderr, "invalid tuner number\n"); return -1; } char *ret_error; if (hdhomerun_device_tuner_lockkey_request(hd, &ret_error) <= 0) { fprintf(stderr, "failed to lock tuner\n"); if (ret_error) { fprintf(stderr, "%s\n", ret_error); } return -1; } hdhomerun_device_set_tuner_target(hd, "none"); char *channelmap; if (hdhomerun_device_get_tuner_channelmap(hd, &channelmap) <= 0) { fprintf(stderr, "failed to query channelmap from device\n"); return -1; } const char *channelmap_scan_group = hdhomerun_channelmap_get_channelmap_scan_group(channelmap); if (!channelmap_scan_group) { fprintf(stderr, "unknown channelmap '%s'\n", channelmap); return -1; } if (hdhomerun_device_channelscan_init(hd, channelmap_scan_group) <= 0) { fprintf(stderr, "failed to initialize channel scan\n"); return -1; } FILE *fp = NULL; if (filename) { fp = fopen(filename, "w"); if (!fp) { fprintf(stderr, "unable to create file: %s\n", filename); return -1; } } register_signal_handlers(sigabort_handler, sigabort_handler, siginfo_handler); int ret = 0; while (!sigabort_flag) { struct hdhomerun_channelscan_result_t result; ret = hdhomerun_device_channelscan_advance(hd, &result); if (ret <= 0) { break; } cmd_scan_printf(fp, "SCANNING: %lu (%s)\n", (unsigned long)result.frequency, result.channel_str ); ret = hdhomerun_device_channelscan_detect(hd, &result); if (ret <= 0) { break; } cmd_scan_printf(fp, "LOCK: %s (ss=%u snq=%u seq=%u)\n", result.status.lock_str, result.status.signal_strength, result.status.signal_to_noise_quality, result.status.symbol_error_quality ); if (result.transport_stream_id_detected) { cmd_scan_printf(fp, "TSID: 0x%04X\n", result.transport_stream_id); } int i; for (i = 0; i < result.program_count; i++) { struct hdhomerun_channelscan_program_t *program = &result.programs[i]; cmd_scan_printf(fp, "PROGRAM %s\n", program->program_str); } } hdhomerun_device_tuner_lockkey_release(hd); if (fp) { fclose(fp); } if (ret < 0) { fprintf(stderr, "communication error sending request to hdhomerun device\n"); } return ret; }