summaryrefslogtreecommitdiff
path: root/mcast/client/.svn/text-base/satlists.c.svn-base
diff options
context:
space:
mode:
Diffstat (limited to 'mcast/client/.svn/text-base/satlists.c.svn-base')
-rw-r--r--mcast/client/.svn/text-base/satlists.c.svn-base133
1 files changed, 133 insertions, 0 deletions
diff --git a/mcast/client/.svn/text-base/satlists.c.svn-base b/mcast/client/.svn/text-base/satlists.c.svn-base
new file mode 100644
index 0000000..6dccb39
--- /dev/null
+++ b/mcast/client/.svn/text-base/satlists.c.svn-base
@@ -0,0 +1,133 @@
+/*
+ * (c) BayCom GmbH, http://www.baycom.de, info@baycom.de
+ *
+ * See the COPYING file for copyright information and
+ * how to reach the author.
+ *
+ */
+
+#include "headers.h"
+
+int satellite_find_by_diseqc (satellite_reference_t * ref, recv_sec_t *sec, struct dvb_frontend_parameters *fep, int mode)
+{
+ int i, j, k, l;
+ netceiver_info_list_t *nc_list=nc_get_list();
+ char buf[6];
+ memcpy(buf,"\xe0\x10\x6f\x0\x0\x0",6);
+ int freq = fep->frequency/1000;
+ int ret=0;
+ int explicit_position=NO_SAT_POS;
+
+ if (sec->diseqc_cmd.msg_len > 6 || !ref || !freq) {
+ return 0;
+ }
+
+ for (l = 0; l < nc_list->nci_num; l++) {
+ netceiver_info_t *nci = nc_list->nci + l;
+
+ for (i = 0; i < nci->sat_list_num; i++) {
+ satellite_list_t *sat_list = nci->sat_list + i;
+
+ for (j = 0; j < sat_list->sat_num; j++) {
+ satellite_info_t *sat = sat_list->sat + j;
+
+ for (k = 0; k < sat->comp_num; k++) {
+ satellite_component_t *comp = sat->comp + k;
+ int oldpos=sat->SatPos^1800;
+ int newpos=(sec->diseqc_cmd.msg[3]+(sec->diseqc_cmd.msg[4]<<8))^1800;
+ // prepare synthetic messsage from satpos and pol./volt.
+ buf[3]=oldpos;
+ buf[4]=oldpos>>8;
+ buf[5]=(comp->Polarisation&1)<<1 | !(comp->sec.tone_mode&1);
+ dbg("compare: old/new %i/%i, %02x %02x %02x %02x %02x %02x <-> %02x %02x %02x %02x %02x %02x\n", oldpos, newpos,
+ buf[0]&0xff,buf[1]&0xff,buf[2]&0xff,buf[3]&0xff, buf[4]&0xff, buf[5]&0xff,
+ sec->diseqc_cmd.msg[0], sec->diseqc_cmd.msg[1], sec->diseqc_cmd.msg[2],
+ sec->diseqc_cmd.msg[3], sec->diseqc_cmd.msg[4], sec->diseqc_cmd.msg[5]);
+
+ dbg("%i mode %i, len %i, %i > %i , %i < %i, %i < %i, %i > %i\n",sat->type,
+ mode, sec->diseqc_cmd.msg_len, freq, comp->RangeMin, freq, comp->RangeMax,
+ sat->SatPosMin, newpos , sat->SatPosMax, newpos);
+
+ // Check if coded sat pos matches
+ if ((sat->type==SAT_SRC_LNB || sat->type==SAT_SRC_UNI) && mode == 0 && sec->diseqc_cmd.msg_len>0 &&
+ (freq >= comp->RangeMin) && (freq <= comp->RangeMax) &&
+ !memcmp (buf, &sec->diseqc_cmd.msg, sec->diseqc_cmd.msg_len)) {
+ dbg("Satpos MATCH\n");
+ ret=1;
+ }
+ // check for rotor
+ else if (sat->type==SAT_SRC_ROTOR && mode == 0 && sec->diseqc_cmd.msg_len>0 &&
+ (freq >= comp->RangeMin) && (freq <= comp->RangeMax) &&
+ (buf[5]==sec->diseqc_cmd.msg[5]) &&
+ (sat->SatPosMin<=newpos && sat->SatPosMax>=newpos)) {
+ dbg("ROTOR MATCH %i\n",newpos);
+ explicit_position=newpos;
+ ret=1;
+ }
+ // check if given diseqc matches raw tuner diseqc
+ else if (mode == 1 && sec->diseqc_cmd.msg_len>0 && !memcmp (&comp->sec.diseqc_cmd.msg, &sec->diseqc_cmd.msg, sec->diseqc_cmd.msg_len)) {
+ dbg("Diseqc 1.0 Match %02x %02x %02x %02x %02x %02x\n",
+ comp->sec.diseqc_cmd.msg[0], comp->sec.diseqc_cmd.msg[1], comp->sec.diseqc_cmd.msg[2],
+ comp->sec.diseqc_cmd.msg[3], comp->sec.diseqc_cmd.msg[4], comp->sec.diseqc_cmd.msg[5]);
+ ret=1;
+ }else if (mode == 2 && (fe_sec_voltage_t)comp->Polarisation == sec->voltage && comp->sec.tone_mode== sec->tone_mode && comp->sec.mini_cmd == sec->mini_cmd) {
+ dbg("Legacy Match, pol %i, tone %i, cmd %i\n",comp->Polarisation,comp->sec.tone_mode,comp->sec.mini_cmd);
+ ret=1;
+ }
+ if (ret) {
+ ref->netceiver = l;
+ ref->sat_list = i;
+ ref->sat = j;
+ ref->comp = k;
+ ref->position=explicit_position;
+ info("Sat found: %d %d %d %d, rotor %d\n",l,i,j,k, explicit_position);
+ return ret;
+ }
+ }
+ }
+ }
+ }
+ return ret;
+}
+
+int satellite_get_pos_by_ref (satellite_reference_t * ref)
+{
+ netceiver_info_list_t *nc_list=nc_get_list();
+ netceiver_info_t *nci = nc_list->nci + ref->netceiver;
+ satellite_list_t *sat_list = nci->sat_list + ref->sat_list;
+ satellite_info_t *sat = sat_list->sat + ref->sat;
+ if (sat->type==SAT_SRC_ROTOR && ref->position!=NO_SAT_POS) {
+ return ref->position;
+ }
+ return sat->SatPos;
+}
+
+int satellite_get_lof_by_ref (satellite_reference_t * ref)
+{
+ netceiver_info_list_t *nc_list=nc_get_list();
+ netceiver_info_t *nci = nc_list->nci + ref->netceiver;
+ satellite_list_t *sat_list = nci->sat_list + ref->sat_list;
+ satellite_info_t *sat = sat_list->sat + ref->sat;
+ satellite_component_t *comp = sat->comp + ref->comp;
+ return comp->LOF;
+}
+
+recv_sec_t *satellite_find_sec_by_ref (satellite_reference_t * ref)
+{
+ netceiver_info_list_t *nc_list=nc_get_list();
+ netceiver_info_t *nci = nc_list->nci + ref->netceiver;
+ satellite_list_t *sat_list = nci->sat_list + ref->sat_list;
+ satellite_info_t *sat = sat_list->sat + ref->sat;
+ satellite_component_t *comp = sat->comp + ref->comp;
+ return &comp->sec;
+}
+
+polarisation_t satellite_find_pol_by_ref (satellite_reference_t * ref)
+{
+ netceiver_info_list_t *nc_list=nc_get_list();
+ netceiver_info_t *nci = nc_list->nci + ref->netceiver;
+ satellite_list_t *sat_list = nci->sat_list + ref->sat_list;
+ satellite_info_t *sat = sat_list->sat + ref->sat;
+ satellite_component_t *comp = sat->comp + ref->comp;
+ return comp->Polarisation;
+}