JTACS (Japanese Total Access Communication System) works now
Tested with MT209 phone.
This commit is contained in:
@@ -105,7 +105,7 @@ double amps_channel2freq(int channel, int uplink)
|
||||
/* JTACS */
|
||||
/* see "ARIB_STD-T64-C.S0057-0v1.0.pdf" */
|
||||
if (uplink == 2)
|
||||
return -55.000 * 1e6;
|
||||
return 55.000 * 1e6;
|
||||
|
||||
/* 799 channels */
|
||||
if (channel >= 1 && channel <= 799)
|
||||
@@ -130,13 +130,19 @@ double amps_channel2freq(int channel, int uplink)
|
||||
enum amps_chan_type amps_channel2type(int channel)
|
||||
{
|
||||
if (!tacs) {
|
||||
/* AMPS */
|
||||
if (channel >= 313 && channel <= 354)
|
||||
return CHAN_TYPE_CC;
|
||||
} else {
|
||||
} else if (!jtacs) {
|
||||
/* TACS */
|
||||
if (channel >= 23 && channel <= 43)
|
||||
return CHAN_TYPE_CC;
|
||||
if (channel >= 323 && channel <= 343)
|
||||
return CHAN_TYPE_CC;
|
||||
} else {
|
||||
/* JTACS */
|
||||
if (channel >= 418 && channel <= 456)
|
||||
return CHAN_TYPE_CC;
|
||||
}
|
||||
|
||||
return CHAN_TYPE_VC;
|
||||
@@ -145,6 +151,7 @@ enum amps_chan_type amps_channel2type(int channel)
|
||||
const char *amps_channel2band(int channel)
|
||||
{
|
||||
if (!tacs) {
|
||||
/* AMPS */
|
||||
if (channel >= 991 && channel <= 1023)
|
||||
return "A''";
|
||||
if (channel >= 1 && channel <= 333)
|
||||
@@ -155,11 +162,15 @@ const char *amps_channel2band(int channel)
|
||||
return "A'";
|
||||
if (channel >= 717 && channel <= 799)
|
||||
return "B'";
|
||||
} else {
|
||||
} else if (!jtacs) {
|
||||
/* TACS */
|
||||
if (channel >= 1 && channel <= 300)
|
||||
return "A";
|
||||
if (channel >= 301 && channel <= 600)
|
||||
return "B";
|
||||
} else {
|
||||
/* JTACS */
|
||||
return "A";
|
||||
}
|
||||
|
||||
return "<invalid>";
|
||||
@@ -213,12 +224,12 @@ void amps_number2min(const char *number, uint32_t *min1, uint16_t *min2)
|
||||
}
|
||||
|
||||
if (!tacs) {
|
||||
/* MIN1 */
|
||||
/* MIN1 (amps) */
|
||||
*min1 = ((uint32_t)(digit2binary(number[0]) * 100 + digit2binary(number[1]) * 10 + digit2binary(number[2]) - 111)) << 14;
|
||||
*min1 |= digit2binary(number[3]) << 10;
|
||||
*min1 |= digit2binary(number[4]) * 100 + digit2binary(number[5]) * 10 + digit2binary(number[6]) - 111;
|
||||
} else {
|
||||
/* MIN1 */
|
||||
/* MIN1 (tacs/jtacs) */
|
||||
*min1 = digit2binary(number[0]) << 20;
|
||||
*min1 |= (digit2binary(number[1]) * 100 + digit2binary(number[2]) * 10 + digit2binary(number[3]) - 111) << 10;
|
||||
*min1 |= digit2binary(number[4]) * 100 + digit2binary(number[5]) * 10 + digit2binary(number[6]) - 111;
|
||||
@@ -229,6 +240,8 @@ void amps_number2min(const char *number, uint32_t *min1, uint16_t *min2)
|
||||
*/
|
||||
/* TACS: convert MIN1 and MIN2 to AREA-XXXXXXX
|
||||
*/
|
||||
/* JTACS: convert MIN1 and MIN2 to NET-XXXXXXX (NET = mobile network code, always 440)
|
||||
*/
|
||||
const char *amps_min22number(uint16_t min2)
|
||||
{
|
||||
static char number[4];
|
||||
@@ -251,7 +264,7 @@ const char *amps_min12number(uint32_t min1)
|
||||
static char number[8];
|
||||
|
||||
if (!tacs) {
|
||||
/* MIN1 */
|
||||
/* MIN1 (amps) */
|
||||
if ((min1 >> 14) > 999)
|
||||
strcpy(number, "???");
|
||||
else {
|
||||
@@ -271,7 +284,7 @@ const char *amps_min12number(uint32_t min1)
|
||||
number[6] = binary2digit(((min1 & 0x3ff) % 10) + 1);
|
||||
}
|
||||
} else {
|
||||
/* MIN1 */
|
||||
/* MIN1 (tacs/jtacs) */
|
||||
if ((min1 >> 20) < 1 || (min1 >> 20) > 10)
|
||||
number[0] = '?';
|
||||
else
|
||||
@@ -515,6 +528,8 @@ int amps_create(const char *kanal, enum amps_chan_type chan_type, const char *de
|
||||
/* check for channel number */
|
||||
if (amps_channel2freq(atoi(kanal), 0) == 0) {
|
||||
PDEBUG(DAMPS, DEBUG_ERROR, "Channel number %s invalid.\n", kanal);
|
||||
if (jtacs)
|
||||
PDEBUG(DAMPS, DEBUG_ERROR, "Try an even channel number, like 440.\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@@ -544,6 +559,11 @@ int amps_create(const char *kanal, enum amps_chan_type chan_type, const char *de
|
||||
PDEBUG(DAMPS, DEBUG_ERROR, "Channel number %s belongs to a voice channel, but your channel type '%s' requires to be on a control channel number. Please use correct channel.\n", kanal, chan_type_long_name(chan_type));
|
||||
return -EINVAL;
|
||||
}
|
||||
/* only even channels */
|
||||
if (jtacs && chan_type != CHAN_TYPE_VC && (atoi(kanal) & 1)) {
|
||||
PDEBUG(DAMPS, DEBUG_ERROR, "Control channel on JTACS system seem not to work with odd channel numbers. Please use even channel number.\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* check if sid machtes channel band */
|
||||
band = amps_channel2band(atoi(kanal));
|
||||
|
Reference in New Issue
Block a user