Added bandedges migration and usage in model

This commit is contained in:
Andreas Kristiansen
2025-07-03 12:24:03 +02:00
parent 17ec8ce249
commit 313c7745cc
3 changed files with 94 additions and 40 deletions

View File

@@ -22,7 +22,7 @@ $config['migration_enabled'] = TRUE;
|
*/
$config['migration_version'] = 246;
$config['migration_version'] = 247;
/*
|--------------------------------------------------------------------------

View File

@@ -0,0 +1,68 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/*
Add bandedges table in use for the dxcluster
*/
defined('BASEPATH') OR exit('No direct script access allowed');
class Migration_add_bandedges extends CI_Migration {
public function up()
{
if (!$this->db->table_exists('bandedges')) {
// Create the bandedges table
$this->dbforge->add_field([
'id' => [
'type' => 'INT',
'constraint' => 11,
'unsigned' => TRUE,
'auto_increment' => TRUE,
],
'userid' => [
'type' => 'INT',
'constraint' => 11,
],
'frequencyfrom' => [
'type' => 'BIGINT',
'constraint' => 20,
],
'frequencyto' => [
'type' => 'BIGINT',
'constraint' => 20,
],
'mode' => [
'type' => 'VARCHAR',
'constraint' => 20,
],
]);
$this->dbforge->add_key('id', TRUE);
$this->dbforge->create_table('bandedges');
// Insert initial data (for all users: userid = -1)
$data = [
['userid' => -1, 'frequencyfrom' => 1800000, 'frequencyto' => 1840000, 'mode' => 'cw'],
['userid' => -1, 'frequencyfrom' => 3500000, 'frequencyto' => 3600000, 'mode' => 'cw'],
['userid' => -1, 'frequencyfrom' => 3700000, 'frequencyto' => 4000000, 'mode' => 'phone'],
['userid' => -1, 'frequencyfrom' => 5350000, 'frequencyto' => 5367000, 'mode' => 'cw'],
['userid' => -1, 'frequencyfrom' => 7000000, 'frequencyto' => 7040000, 'mode' => 'cw'],
['userid' => -1, 'frequencyfrom' => 7100000, 'frequencyto' => 7300000, 'mode' => 'phone'],
['userid' => -1, 'frequencyfrom' => 10100000, 'frequencyto' => 10130000, 'mode' => 'cw'],
['userid' => -1, 'frequencyfrom' => 14000000, 'frequencyto' => 14070000, 'mode' => 'cw'],
['userid' => -1, 'frequencyfrom' => 14125000, 'frequencyto' => 14350000, 'mode' => 'phone'],
['userid' => -1, 'frequencyfrom' => 14070000, 'frequencyto' => 14125000, 'mode' => 'digi'],
];
$this->db->insert_batch('bandedges', $data);
}
}
public function down()
{
$this->dbforge->drop_table('bandedges');
}
}

View File

@@ -3,6 +3,17 @@
use Wavelog\Dxcc\Dxcc;
class Dxcluster_model extends CI_Model {
protected $bandedges = [];
public function __construct() {
// Load bandedges into a class property
$this->db->where('userid', -1);
$query = $this->db->get('bandedges');
$this->bandedges = $query->result_array(); // or ->result() if you want objects
}
public function dxc_spotlist($band = '20m', $maxage = 60, $de = '', $mode = 'All') {
$this->load->helper(array('psr4_autoloader'));
@@ -137,47 +148,22 @@ class Dxcluster_model extends CI_Model {
return false;
}
function isFrequencyInMode($frequency, $mode) {
$bandMap = [
['mode' => 'cw', 'range' => [1800, 1840]],
['mode' => 'phone', 'range' => [1840, 2000]],
['mode' => 'cw', 'range' => [3500, 3600]],
['mode' => 'phone', 'range' => [3700, 4000]],
['mode' => 'cw', 'range' => [5350, 5367]],
['mode' => 'phone', 'range' => [5350, 5367]],
['mode' => 'digi', 'range' => [5350, 5367]],
['mode' => 'cw', 'range' => [7000, 7040]],
['mode' => 'phone', 'range' => [7100, 7300]],
['mode' => 'cw', 'range' => [10100, 10130]],
['mode' => 'digi', 'range' => [10100, 10130]],
['mode' => 'cw', 'range' => [14000, 14070]],
['mode' => 'phone', 'range' => [14125, 14350]],
['mode' => 'cw', 'range' => [18068, 18096]],
['mode' => 'phone', 'range' => [18110, 18168]],
['mode' => 'cw', 'range' => [21000, 21070]],
['mode' => 'phone', 'range' => [21125, 21450]],
['mode' => 'cw', 'range' => [24890, 24910]],
['mode' => 'phone', 'range' => [24930, 24990]],
['mode' => 'cw', 'range' => [28000, 28070]],
['mode' => 'phone', 'range' => [28125, 29700]],
['mode' => 'cw', 'range' => [50000, 50109]],
['mode' => 'phone', 'range' => [50110, 52000]],
];
foreach ($bandMap as $entry) {
if ($entry['mode'] === $mode) {
[$low, $high] = $entry['range'];
if ($frequency >= $low && $frequency < $high) {
return true;
}
}
}
return false;
}
public function isFrequencyInMode($frequency, $mode) {
// Ensure frequency is in Hz if input is in kHz
if ($frequency < 1_000_000) {
$frequency *= 1000;
}
foreach ($this->bandedges as $band) {
if (strtolower($band['mode']) === strtolower($mode)) {
if ($frequency >= $band['frequencyfrom'] && $frequency < $band['frequencyto']) {
return true;
}
}
}
return false;
}
public function dxc_qrg_lookup($qrg, $maxage = 120) {
$this->load->helper(array('psr4_autoloader'));