diff options
Diffstat (limited to 'mcast/client/.svn/text-base/satlists.c.svn-base')
-rw-r--r-- | mcast/client/.svn/text-base/satlists.c.svn-base | 133 |
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; +} |