package com.silicondust.libhdhomerun;
public final class HDHomerun_Channels {
public static class hdhomerun_channel_entry_t {
hdhomerun_channel_entry_t next;
hdhomerun_channel_entry_t prev;
long frequency; // uint32_t
int channel_number; //uint16_t
String name; // char[16];
public hdhomerun_channel_entry_t() {
}
};
public static class hdhomerun_channelmap_range_t {
int channel_range_start; // uint16_t
int channel_range_end; // uint16_t
long frequency; // uint32_t
long spacing; // uint32_t
public hdhomerun_channelmap_range_t(int start, int end, int freq, int spac) {
channel_range_start = start;
channel_range_end = end;
frequency = freq;
spacing = spac;
}
};
public static class hdhomerun_channelmap_record_t {
final String channelmap;
final hdhomerun_channelmap_range_t[] range_list;
final String channelmap_scan_group;
final String countrycodes;
public hdhomerun_channelmap_record_t(final String map, final hdhomerun_channelmap_range_t[] list, final String group, final String countrycds) {
channelmap = map;
range_list = list;
channelmap_scan_group = group;
countrycodes = countrycds;
}
};
/* AU antenna channels. Channels {6, 7, 8, 9, 9A} are numbered {5, 6, 7, 8, 9} by the HDHomeRun. */
public static final hdhomerun_channelmap_range_t[] hdhomerun_channelmap_range_au_bcast = new hdhomerun_channelmap_range_t[] {
new hdhomerun_channelmap_range_t(5, 12, 177500000, 7000000),
new hdhomerun_channelmap_range_t( 21, 69, 480500000, 7000000),
new hdhomerun_channelmap_range_t( 0, 0, 0, 0)
};
/* EU antenna channels. */
public static final hdhomerun_channelmap_range_t[] hdhomerun_channelmap_range_eu_bcast = {
new hdhomerun_channelmap_range_t( 5, 12, 177500000, 7000000),
new hdhomerun_channelmap_range_t( 21, 69, 474000000, 8000000),
new hdhomerun_channelmap_range_t( 0, 0, 0, 0)
};
/* EU cable channels. No common standard - use frequency in MHz for channel number. */
public static final hdhomerun_channelmap_range_t[] hdhomerun_channelmap_range_eu_cable = {
new hdhomerun_channelmap_range_t( 50, 998, 50000000, 1000000),
new hdhomerun_channelmap_range_t( 0, 0, 0, 0)
};
/* US antenna channels. */
public static final hdhomerun_channelmap_range_t[] hdhomerun_channelmap_range_us_bcast = {
new hdhomerun_channelmap_range_t( 2, 4, 57000000, 6000000),
new hdhomerun_channelmap_range_t( 5, 6, 79000000, 6000000),
new hdhomerun_channelmap_range_t( 7, 13, 177000000, 6000000),
new hdhomerun_channelmap_range_t( 14, 69, 473000000, 6000000),
new hdhomerun_channelmap_range_t( 0, 0, 0, 0)
};
/* US cable channels. */
public static final hdhomerun_channelmap_range_t[] hdhomerun_channelmap_range_us_cable = {
new hdhomerun_channelmap_range_t( 2, 4, 57000000, 6000000),
new hdhomerun_channelmap_range_t( 5, 6, 79000000, 6000000),
new hdhomerun_channelmap_range_t( 7, 13, 177000000, 6000000),
new hdhomerun_channelmap_range_t( 14, 22, 123000000, 6000000),
new hdhomerun_channelmap_range_t( 23, 94, 219000000, 6000000),
new hdhomerun_channelmap_range_t( 95, 99, 93000000, 6000000),
new hdhomerun_channelmap_range_t(100, 158, 651000000, 6000000),
new hdhomerun_channelmap_range_t( 0, 0, 0, 0)
};
/* US cable channels (HRC). */
public static final hdhomerun_channelmap_range_t[] hdhomerun_channelmap_range_us_hrc = {
new hdhomerun_channelmap_range_t( 2, 4, 55752700, 6000300),
new hdhomerun_channelmap_range_t( 5, 6, 79753900, 6000300),
new hdhomerun_channelmap_range_t( 7, 13, 175758700, 6000300),
new hdhomerun_channelmap_range_t( 14, 22, 121756000, 6000300),
new hdhomerun_channelmap_range_t( 23, 94, 217760800, 6000300),
new hdhomerun_channelmap_range_t( 95, 99, 91754500, 6000300),
new hdhomerun_channelmap_range_t(100, 158, 649782400, 6000300),
new hdhomerun_channelmap_range_t( 0, 0, 0, 0)
};
/* US cable channels (IRC). */
public static final hdhomerun_channelmap_range_t[] hdhomerun_channelmap_range_us_irc = {
new hdhomerun_channelmap_range_t( 2, 4, 57012500, 6000000),
new hdhomerun_channelmap_range_t( 5, 6, 81012500, 6000000),
new hdhomerun_channelmap_range_t( 7, 13, 177012500, 6000000),
new hdhomerun_channelmap_range_t( 14, 22, 123012500, 6000000),
new hdhomerun_channelmap_range_t( 23, 41, 219012500, 6000000),
new hdhomerun_channelmap_range_t( 42, 42, 333025000, 6000000),
new hdhomerun_channelmap_range_t( 43, 94, 339012500, 6000000),
new hdhomerun_channelmap_range_t( 95, 97, 93012500, 6000000),
new hdhomerun_channelmap_range_t( 98, 99, 111025000, 6000000),
new hdhomerun_channelmap_range_t(100, 158, 651012500, 6000000),
new hdhomerun_channelmap_range_t( 0, 0, 0, 0)
};
public static final hdhomerun_channelmap_record_t[] hdhomerun_channelmap_table = {
new hdhomerun_channelmap_record_t("au-bcast", hdhomerun_channelmap_range_au_bcast, "au-bcast", "AU"),
new hdhomerun_channelmap_record_t("au-cable", hdhomerun_channelmap_range_eu_cable, "au-cable", "AU"),
new hdhomerun_channelmap_record_t("eu-bcast", hdhomerun_channelmap_range_eu_bcast, "eu-bcast", "EU PA"),
new hdhomerun_channelmap_record_t("eu-cable", hdhomerun_channelmap_range_eu_cable, "eu-cable", "EU"),
new hdhomerun_channelmap_record_t("tw-bcast", hdhomerun_channelmap_range_us_bcast, "tw-bcast", "TW"),
new hdhomerun_channelmap_record_t("tw-cable", hdhomerun_channelmap_range_us_cable, "tw-cable", "TW"),
new hdhomerun_channelmap_record_t("us-bcast", hdhomerun_channelmap_range_us_bcast, "us-bcast", "CA US"),
new hdhomerun_channelmap_record_t("us-cable", hdhomerun_channelmap_range_us_cable, "us-cable us-hrc us-irc", "CA PA US"),
new hdhomerun_channelmap_record_t("us-hrc", hdhomerun_channelmap_range_us_hrc , "us-cable us-hrc us-irc", "CA PA US"),
new hdhomerun_channelmap_record_t("us-irc", hdhomerun_channelmap_range_us_irc, "us-cable us-hrc us-irc", "CA PA US"),
new hdhomerun_channelmap_record_t(null, null, null, null)
};
public static String hdhomerun_channelmap_get_channelmap_from_country_source(final String countrycode, final String source) {
boolean country_found = false;
int recIndex = 0;
hdhomerun_channelmap_record_t record = hdhomerun_channelmap_table[recIndex++];
while (record.channelmap != null && record.channelmap.length() > 0) {
if (!record.countrycodes.contains(countrycode)) {
record = hdhomerun_channelmap_table[recIndex++];
continue;
}
if (record.channelmap.contains(source)) {
return record.channelmap;
}
country_found = true;
record = hdhomerun_channelmap_table[recIndex++];
}
if (!country_found) {
return hdhomerun_channelmap_get_channelmap_from_country_source("EU", source);
}
return null;
}
public static final String hdhomerun_channelmap_get_channelmap_scan_group(final String channelmap) {
int recIndex = 0;
hdhomerun_channelmap_record_t record = hdhomerun_channelmap_table[recIndex++];
while (record.channelmap != null && record.channelmap.length() > 0) {
if (channelmap.contains(record.channelmap)) {
return record.channelmap_scan_group;
}
record = hdhomerun_channelmap_table[recIndex++];
}
return null;
}
// extern LIBTYPE uint16_t hdhomerun_channel_entry_channel_number(struct hdhomerun_channel_entry_t *entry);
// extern LIBTYPE uint32_t hdhomerun_channel_entry_frequency(struct hdhomerun_channel_entry_t *entry);
// extern LIBTYPE const char *hdhomerun_channel_entry_name(struct hdhomerun_channel_entry_t *entry);
public static long hdhomerun_channel_frequency_round(long frequency, long resolution) { // uint32_t, uint32_t, uint32_t
frequency += resolution / 2;
return (frequency / resolution) * resolution;
}
public static long hdhomerun_channel_frequency_round_normal(long frequency) { // uint32_t , uint32_t
return hdhomerun_channel_frequency_round(frequency, 125000);
}
}