@ham2k/lib-operation-data 0.8.2 → 0.8.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/data/bandPlans.json +20 -11
- package/src/lib/modes.js +8 -1
- package/src/lib/modes.spec.js +15 -1
package/package.json
CHANGED
package/src/data/bandPlans.json
CHANGED
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
{ "name": "CW", "mhz": [1800, 1843], "mode": "CW" },
|
|
12
12
|
{ "name": "Data", "mhz": [1800, 1810], "mode": "RTTY" },
|
|
13
13
|
{ "name": "FT8", "mhz": [1840, 1843], "mode": "FT8" },
|
|
14
|
-
{ "name": "Phone", "mhz": [1843, 2000], "mode": "SSB", "submode": "LSB" }
|
|
14
|
+
{ "name": "Phone", "mhz": [1843, 2000], "mode": "SSB", "submode": "LSB" },
|
|
15
|
+
{ "name": "Australia", "mhz": [1800, 1875], "mode": null, "countries": ["au"] }
|
|
15
16
|
]
|
|
16
17
|
},
|
|
17
18
|
"80m": {
|
|
@@ -22,7 +23,8 @@
|
|
|
22
23
|
{ "name": "FT8", "mhz": [3568, 3571], "mode": "FT8", "regions": [ 3 ] },
|
|
23
24
|
{ "name": "Data", "mhz": [3570, 3600], "mode": "RTTY" },
|
|
24
25
|
{ "name": "FT8", "mhz": [3573, 3576], "mode": "FT8" },
|
|
25
|
-
{ "name": "Phone", "mhz": [3600, 4000], "mode": "SSB", "submode": "LSB" }
|
|
26
|
+
{ "name": "Phone", "mhz": [3600, 4000], "mode": "SSB", "submode": "LSB" },
|
|
27
|
+
{ "name": "Australia", "mhz": [3500, 3800], "mode": null, "countries": ["au"] }
|
|
26
28
|
]
|
|
27
29
|
},
|
|
28
30
|
"60m": {
|
|
@@ -43,8 +45,9 @@
|
|
|
43
45
|
{ "name": "FT4", "mhz": [7047.5, 7050.5], "mode": "FT4" },
|
|
44
46
|
{ "name": "Phone", "mhz": [7060, 7300], "mode": "SSB", "submode": "LSB" },
|
|
45
47
|
{ "name": "FT8", "mhz": [7074, 7077], "mode": "FT8" },
|
|
46
|
-
{ "name": "Data", "mhz": [7080, 7125], "mode": "RTTY" },
|
|
47
|
-
{ "name": "Phone", "mhz": [7125, 7300], "mode": "SSB", "submode": "LSB", "countries": [ "us" ] }
|
|
48
|
+
{ "name": "Data", "mhz": [7080, 7125], "mode": "RTTY", "countries": [ "us" ] },
|
|
49
|
+
{ "name": "Phone", "mhz": [7125, 7300], "mode": "SSB", "submode": "LSB", "countries": [ "us" ] },
|
|
50
|
+
{ "name": "Australia", "mhz": [7000, 7300], "mode": null, "countries": ["au"] }
|
|
48
51
|
]
|
|
49
52
|
},
|
|
50
53
|
"30m": {
|
|
@@ -54,7 +57,7 @@
|
|
|
54
57
|
{ "name": "Data", "mhz": [10130, 10140], "mode": "RTTY" },
|
|
55
58
|
{ "name": "FT8", "mhz": [10136, 10139], "mode": "FT8" },
|
|
56
59
|
{ "name": "FT4", "mhz": [10140, 10143], "mode": "FT4" },
|
|
57
|
-
{ "name": "
|
|
60
|
+
{ "name": "Countries with no plan on 30m", "mhz": [10100, 10150], "mode": null, "countries": ["au", "za"] }
|
|
58
61
|
]
|
|
59
62
|
},
|
|
60
63
|
"20m": {
|
|
@@ -67,7 +70,8 @@
|
|
|
67
70
|
{ "name": "FT8", "mhz": [14074, 14077], "mode": "FT8" },
|
|
68
71
|
{ "name": "FT4", "mhz": [14080, 14083], "mode": "FT4" },
|
|
69
72
|
{ "name": "Phone", "mhz": [14112, 14350], "mode": "SSB", "submode": "USB", "regions": [ 1, 2 ] },
|
|
70
|
-
{ "name": "Phone", "mhz": [14150, 14350], "mode": "SSB", "submode": "USB", "countries": [ "us" ] }
|
|
73
|
+
{ "name": "Phone", "mhz": [14150, 14350], "mode": "SSB", "submode": "USB", "countries": [ "us" ] },
|
|
74
|
+
{ "name": "Australia", "mhz": [14000, 14350], "mode": null, "countries": ["au"] }
|
|
71
75
|
]
|
|
72
76
|
},
|
|
73
77
|
"17m": {
|
|
@@ -77,7 +81,8 @@
|
|
|
77
81
|
{ "name": "Data", "mhz": [18100, 18105], "mode": "RTTY" },
|
|
78
82
|
{ "name": "FT8", "mhz": [18100, 18103], "mode": "FT8" },
|
|
79
83
|
{ "name": "FT4", "mhz": [18104, 18107], "mode": "FT4" },
|
|
80
|
-
{ "name": "Phone", "mhz": [18110, 18168], "mode": "SSB", "submode": "USB" }
|
|
84
|
+
{ "name": "Phone", "mhz": [18110, 18168], "mode": "SSB", "submode": "USB" },
|
|
85
|
+
{ "name": "Australia", "mhz": [18068, 18168], "mode": null, "countries": ["au"] }
|
|
81
86
|
]
|
|
82
87
|
},
|
|
83
88
|
"15m": {
|
|
@@ -87,7 +92,8 @@
|
|
|
87
92
|
{ "name": "Data", "mhz": [21070, 21095], "mode": "RTTY" },
|
|
88
93
|
{ "name": "FT8", "mhz": [21074, 21077], "mode": "FT8" },
|
|
89
94
|
{ "name": "FT4", "mhz": [21140, 21143], "mode": "FT4" },
|
|
90
|
-
{ "name": "Phone", "mhz": [21150, 21450], "mode": "SSB", "submode": "USB" }
|
|
95
|
+
{ "name": "Phone", "mhz": [21150, 21450], "mode": "SSB", "submode": "USB" },
|
|
96
|
+
{ "name": "Australia", "mhz": [21000, 21450], "mode": null, "countries": ["au"] }
|
|
91
97
|
]
|
|
92
98
|
},
|
|
93
99
|
"12m": {
|
|
@@ -97,7 +103,8 @@
|
|
|
97
103
|
{ "name": "FT8", "mhz": [24915, 24918], "mode": "FT8" },
|
|
98
104
|
{ "name": "FT4", "mhz": [24919, 23922], "mode": "FT4" },
|
|
99
105
|
{ "name": "Data", "mhz": [24920, 24925], "mode": "RTTY" },
|
|
100
|
-
{ "name": "Phone", "mhz": [24930, 24990], "mode": "SSB", "submode": "USB" }
|
|
106
|
+
{ "name": "Phone", "mhz": [24930, 24990], "mode": "SSB", "submode": "USB" },
|
|
107
|
+
{ "name": "Australia", "mhz": [24890, 24990], "mode": null, "countries": ["au"] }
|
|
101
108
|
]
|
|
102
109
|
},
|
|
103
110
|
"10m": {
|
|
@@ -113,7 +120,8 @@
|
|
|
113
120
|
{ "name": "Satellite", "mhz": [29300, 29520] },
|
|
114
121
|
{ "name": "Repeater Uplinks", "mhz": [29520, 29590] },
|
|
115
122
|
{ "name": "FM", "mhz": [29520, 29700], "mode": "FM" },
|
|
116
|
-
{ "name": "Repeater Downlinks", "mhz": [29620, 29700] }
|
|
123
|
+
{ "name": "Repeater Downlinks", "mhz": [29620, 29700] },
|
|
124
|
+
{ "name": "Australia", "mhz": [28000, 29700], "mode": null, "countries": ["au"] }
|
|
117
125
|
]
|
|
118
126
|
},
|
|
119
127
|
"6m": {
|
|
@@ -126,7 +134,8 @@
|
|
|
126
134
|
{ "name": "FM", "mhz": [51110, 52100], "mode": "FM" },
|
|
127
135
|
{ "name": "FT8", "mhz": [50313, 50316], "mode": "FT8" },
|
|
128
136
|
{ "name": "FT4", "mhz": [50318, 50321], "mode": "FT4" },
|
|
129
|
-
{ "name": "FT8", "mhz": [50323, 50326], "mode": "FT8" }
|
|
137
|
+
{ "name": "FT8", "mhz": [50323, 50326], "mode": "FT8" },
|
|
138
|
+
{ "name": "Australia", "mhz": [50000, 54000], "mode": null, "countries": ["au"] }
|
|
130
139
|
]
|
|
131
140
|
},
|
|
132
141
|
"2m": {
|
package/src/lib/modes.js
CHANGED
|
@@ -163,7 +163,13 @@ const AllSegments = Object.keys(BandPlans.bands).reduce((segments, band) => {
|
|
|
163
163
|
}, [])
|
|
164
164
|
|
|
165
165
|
export function modeForFrequency(frequency, { ituRegion, countryCode, entityPrefix } = {}) {
|
|
166
|
-
const segments = AllSegments.filter(segment =>
|
|
166
|
+
const segments = AllSegments.filter(segment => (
|
|
167
|
+
(segment.mhz[0] <= frequency && segment.mhz[1] >= frequency) &&
|
|
168
|
+
(!entityPrefix || Object.keys(segment.entities).length === 0 || segment.entities[entityPrefix]) &&
|
|
169
|
+
(!countryCode || Object.keys(segment.countries).length === 0 || segment.countries[countryCode]) &&
|
|
170
|
+
(!ituRegion || Object.keys(segment.regions).length === 0 || segment.regions[ituRegion])
|
|
171
|
+
))
|
|
172
|
+
|
|
167
173
|
const sortedSegments = segments.sort((a, b) => {
|
|
168
174
|
if (entityPrefix && !a.entities[entityPrefix] && b.entities[entityPrefix]) return 1
|
|
169
175
|
if (entityPrefix && a.entities[entityPrefix] && !b.entities[entityPrefix]) return -1
|
|
@@ -176,5 +182,6 @@ export function modeForFrequency(frequency, { ituRegion, countryCode, entityPref
|
|
|
176
182
|
|
|
177
183
|
return a.width - b.width
|
|
178
184
|
})
|
|
185
|
+
|
|
179
186
|
return sortedSegments[0]?.mode
|
|
180
187
|
}
|
package/src/lib/modes.spec.js
CHANGED
|
@@ -5,10 +5,24 @@ describe('modeForFrequency', () => {
|
|
|
5
5
|
expect(modeForFrequency(14255)).toEqual('SSB')
|
|
6
6
|
expect(modeForFrequency(14107)).toEqual('CW')
|
|
7
7
|
expect(modeForFrequency(14074)).toEqual('FT8')
|
|
8
|
+
})
|
|
8
9
|
|
|
10
|
+
it('should handle different bandplans for different regions', () => {
|
|
9
11
|
expect(modeForFrequency(14140)).toEqual('CW')
|
|
10
12
|
expect(modeForFrequency(14140, { ituRegion: 2 })).toEqual('SSB')
|
|
11
|
-
|
|
13
|
+
})
|
|
12
14
|
|
|
15
|
+
// The current bandplan data does not have any entity-specific segments
|
|
16
|
+
// TODO: mock data for this test
|
|
17
|
+
// it('should handle different bandplans for different entities', () => {
|
|
18
|
+
// expect(modeForFrequency(14140, { entityPrefix: 'K' })).toEqual('CW')
|
|
19
|
+
// expect(modeForFrequency(14140, { entityPrefix: 'VK' })).toBeNull()
|
|
20
|
+
// })
|
|
21
|
+
|
|
22
|
+
it('should handle different bandplans for different countries', () => {
|
|
23
|
+
expect(modeForFrequency(7090, { countryCode: 'us' })).toBe('RTTY')
|
|
24
|
+
expect(modeForFrequency(7090, { countryCode: 've' })).toBe('SSB')
|
|
25
|
+
expect(modeForFrequency(7090, { countryCode: 'au' })).toBeNull()
|
|
13
26
|
})
|
|
27
|
+
|
|
14
28
|
})
|