Fix squelch values for GD-77 and RD-5R.
This commit is contained in:
parent
5e4d92f2b0
commit
ae9239bf22
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Configuration generated 2018/11/12 by dmrconfig, version 0.9.193
|
||||
# Configuration generated 2018/11/21 by dmrconfig, version 0.9.193
|
||||
#
|
||||
Radio: Radioddity GD-77
|
||||
Last Programmed Date: 2018-03-23 15:19
|
||||
@ -67,8 +67,8 @@ Digital Name Receive Transmit Power Scan TOT RO Admit Color Slot
|
||||
# 13) Bandwidth in kHz: 12.5, 20, 25
|
||||
#
|
||||
Analog Name Receive Transmit Power Scan TOT RO Admit Squelch RxTone TxTone Width
|
||||
16 Channel16 145.885 +0 High 1 - - - 0 67.0 67.0 25
|
||||
32 Channel32 437.850 +0 High 2 - - - 0 67.0 67.0 25
|
||||
16 Channel16 145.885 +0 High 1 - - - Normal 67.0 67.0 25
|
||||
32 Channel32 437.850 +0 High 2 - - - Normal 67.0 67.0 25
|
||||
|
||||
# Table of channel zones.
|
||||
# 1) Zone number: 1-250
|
||||
|
@ -205,44 +205,44 @@ Digital Name Receive Transmit Power Scan TOT RO Admit Color Slot
|
||||
Analog Name Receive Transmit Power Scan TOT RO Admit Squelch RxTone TxTone Width
|
||||
|
||||
# VHF Band 144-148
|
||||
201 Palo_Alto_N6NFI 145.230 -0.6 High 1 180 - Free 1 - 100.0 25
|
||||
202 Milpitas_W6MLP 145.430 -0.6 High 1 180 - Free 1 - 85.4 25
|
||||
203 Saratoga_K6SA 146.655 -0.6 High 1 180 - Free 1 - 114.8 25
|
||||
204 Newark_N6MM 146.670 -0.6 High 1 180 - Free 1 - 110.9 25
|
||||
205 Mill_Vally_K6GWE 146.700 -0.6 High 1 180 - Free 1 - 179.9 25
|
||||
206 San_Jose_K6INC 146.820 -0.6 High 1 180 - Free 1 - 123.0 25
|
||||
207 Orinda_K6LNK 146.850 -0.6 High 1 180 - Free 1 - 103.5 25
|
||||
208 Pleasanton_W6SRR 147.045 +0.6 High 1 180 - Free 1 - 94.8 25
|
||||
209 Concord_W6CX 147.060 +0.6 High 1 180 - Free 1 - 100.0 25
|
||||
210 Napa_W6CO 147.180 +0.6 High 1 180 - Free 1 - 91.5 25
|
||||
211 Morgan_Hil_K7DAA 147.330 +0.6 High 1 180 - Free 1 - 103.5 25
|
||||
212 Los_Gatos_AB6LI 147.945 -0.6 High 1 180 - Free 1 - 156.7 25
|
||||
201 Palo_Alto_N6NFI 145.230 -0.6 High 1 180 - Free Normal - 100.0 25
|
||||
202 Milpitas_W6MLP 145.430 -0.6 High 1 180 - Free Normal - 85.4 25
|
||||
203 Saratoga_K6SA 146.655 -0.6 High 1 180 - Free Normal - 114.8 25
|
||||
204 Newark_N6MM 146.670 -0.6 High 1 180 - Free Normal - 110.9 25
|
||||
205 Mill_Vally_K6GWE 146.700 -0.6 High 1 180 - Free Normal - 179.9 25
|
||||
206 San_Jose_K6INC 146.820 -0.6 High 1 180 - Free Normal - 123.0 25
|
||||
207 Orinda_K6LNK 146.850 -0.6 High 1 180 - Free Normal - 103.5 25
|
||||
208 Pleasanton_W6SRR 147.045 +0.6 High 1 180 - Free Normal - 94.8 25
|
||||
209 Concord_W6CX 147.060 +0.6 High 1 180 - Free Normal - 100.0 25
|
||||
210 Napa_W6CO 147.180 +0.6 High 1 180 - Free Normal - 91.5 25
|
||||
211 Morgan_Hil_K7DAA 147.330 +0.6 High 1 180 - Free Normal - 103.5 25
|
||||
212 Los_Gatos_AB6LI 147.945 -0.6 High 1 180 - Free Normal - 156.7 25
|
||||
|
||||
# UHF Band 440-446
|
||||
301 San_Jose_W6YOP 440.275 +5 High 1 180 - Free 1 - 127.3 25
|
||||
302 Woodside_N6ZX 440.450 +5 High 1 180 - Free 1 - 107.2 25
|
||||
303 Campbell_NO1PC 441.025 +5 High 1 180 - Free 1 - 110.9 25
|
||||
304 Los_Gatos_K6UB 441.700 +5 High 1 180 - Free 1 - 127.3 25
|
||||
305 San_Jose_WB6ZVW 442.500 +5 High 1 180 - Free 1 - 100.0 25
|
||||
306 San_Jose_WR6ABD 442.900 +5 High 1 180 - Free 1 - 162.2 25
|
||||
307 Morgan_Hil_K7DAA 442.975 +5 High 1 180 - Free 1 - 100.0 25
|
||||
308 Orinda_N6QOP 443.050 +5 High 1 180 - Free 1 - 114.8 25
|
||||
309 San_Jose_K6LNK 443.075 +5 High 1 180 - Free 1 - 123.0 25
|
||||
310 Palo_Alto_WW6BAY 443.225 +5 High 1 180 - Free 1 - 100.0 25
|
||||
311 San_Jose_KE6STH 443.575 +5 High 1 180 - Free 1 - 110.9 25
|
||||
312 Oakland_WW6BAY 443.975 +5 High 1 180 - Free 1 - 100.0 25
|
||||
313 San_Jose_K6GOD 444.725 +5 High 1 180 - Free 1 - 162.2 25
|
||||
314 Los_Gatos_WB6KHP 444.975 +5 High 1 180 - Free 1 - 127.3 25
|
||||
301 San_Jose_W6YOP 440.275 +5 High 1 180 - Free Normal - 127.3 25
|
||||
302 Woodside_N6ZX 440.450 +5 High 1 180 - Free Normal - 107.2 25
|
||||
303 Campbell_NO1PC 441.025 +5 High 1 180 - Free Normal - 110.9 25
|
||||
304 Los_Gatos_K6UB 441.700 +5 High 1 180 - Free Normal - 127.3 25
|
||||
305 San_Jose_WB6ZVW 442.500 +5 High 1 180 - Free Normal - 100.0 25
|
||||
306 San_Jose_WR6ABD 442.900 +5 High 1 180 - Free Normal - 162.2 25
|
||||
307 Morgan_Hil_K7DAA 442.975 +5 High 1 180 - Free Normal - 100.0 25
|
||||
308 Orinda_N6QOP 443.050 +5 High 1 180 - Free Normal - 114.8 25
|
||||
309 San_Jose_K6LNK 443.075 +5 High 1 180 - Free Normal - 123.0 25
|
||||
310 Palo_Alto_WW6BAY 443.225 +5 High 1 180 - Free Normal - 100.0 25
|
||||
311 San_Jose_KE6STH 443.575 +5 High 1 180 - Free Normal - 110.9 25
|
||||
312 Oakland_WW6BAY 443.975 +5 High 1 180 - Free Normal - 100.0 25
|
||||
313 San_Jose_K6GOD 444.725 +5 High 1 180 - Free Normal - 162.2 25
|
||||
314 Los_Gatos_WB6KHP 444.975 +5 High 1 180 - Free Normal - 127.3 25
|
||||
|
||||
# Simplex frequencies
|
||||
401 S_446.0 446.000 +0 High 2 180 - Free 1 - - 25
|
||||
402 S_446.5 446.500 +0 High 2 180 - Free 1 - - 25
|
||||
403 S_441.0 441.000 +0 High 2 180 - Free 1 - - 25
|
||||
404 S_146.52 146.520 +0 High 2 180 - Free 1 - - 25
|
||||
405 S_146.46 146.460 +0 High 2 180 - Free 1 - - 25
|
||||
406 S_147.42 147.420 +0 High 2 180 - Free 1 - - 25
|
||||
407 WX_1 162.450 +0 Low - 180 + Free 1 - - 25
|
||||
408 WX_5 162.550 +0 Low - 180 + Free 1 - - 25
|
||||
401 S_446.0 446.000 +0 High 2 180 - Free Normal - - 25
|
||||
402 S_446.5 446.500 +0 High 2 180 - Free Normal - - 25
|
||||
403 S_441.0 441.000 +0 High 2 180 - Free Normal - - 25
|
||||
404 S_146.52 146.520 +0 High 2 180 - Free Normal - - 25
|
||||
405 S_146.46 146.460 +0 High 2 180 - Free Normal - - 25
|
||||
406 S_147.42 147.420 +0 High 2 180 - Free Normal - - 25
|
||||
407 WX_1 162.450 +0 Low - 180 + Free Normal - - 25
|
||||
408 WX_5 162.550 +0 Low - 180 + Free Normal - - 25
|
||||
|
||||
# Table of channel zones.
|
||||
# 1) Zone number: 1-250
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Configuration generated 2018/11/12 by dmrconfig, version 0.9.193
|
||||
# Configuration generated 2018/11/21 by dmrconfig, version 0.9.193
|
||||
#
|
||||
Radio: Radioddity GD-77
|
||||
Last Programmed Date: 2018-05-05 01:54
|
||||
@ -359,10 +359,10 @@ Digital Name Receive Transmit Power Scan TOT RO Admit Color Slot
|
||||
# 13) Bandwidth in kHz: 12.5, 20, 25
|
||||
#
|
||||
Analog Name Receive Transmit Power Scan TOT RO Admit Squelch RxTone TxTone Width
|
||||
1 147.06R 147.060 +0.6 High 1 - - - 0 - 141.3 12.5
|
||||
2 147.06S 147.060 +0 High 1 - - - 0 - - 12.5
|
||||
3 443.7R 443.700 +5 High 1 - - - 0 - 141.3 12.5
|
||||
4 443.7S 443.700 +0 High 1 - - - 0 - - 12.5
|
||||
1 147.06R 147.060 +0.6 High 1 - - - Normal - 141.3 12.5
|
||||
2 147.06S 147.060 +0 High 1 - - - Normal - - 12.5
|
||||
3 443.7R 443.700 +5 High 1 - - - Normal - 141.3 12.5
|
||||
4 443.7S 443.700 +0 High 1 - - - Normal - - 12.5
|
||||
|
||||
# Table of channel zones.
|
||||
# 1) Zone number: 1-250
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Configuration generated 2018/11/12 by dmrconfig, version 0.9.193
|
||||
# Configuration generated 2018/11/21 by dmrconfig, version 0.9.193
|
||||
#
|
||||
Radio: Baofeng RD-5R
|
||||
Last Programmed Date: 2018-05-13 13:25
|
||||
@ -160,7 +160,7 @@ Digital Name Receive Transmit Power Scan TOT RO Admit Color Slot
|
||||
# 7) Transmit timeout timer in seconds: 0, 15, 30, 45... 555
|
||||
# 8) Receive only: -, +
|
||||
# 9) Admit criteria: -, Free, Tone
|
||||
# 10) Squelch level: Normal, Tight
|
||||
# 10) Squelch level: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
|
||||
# 11) Guard tone for receive, or '-' to disable
|
||||
# 12) Guard tone for transmit, or '-' to disable
|
||||
# 13) Bandwidth in kHz: 12.5, 20, 25
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Configuration generated 2018/11/12 by dmrconfig, version 0.9.193
|
||||
# Configuration generated 2018/11/21 by dmrconfig, version 0.9.193
|
||||
#
|
||||
Radio: Baofeng RD-5R
|
||||
Last Programmed Date: 2018-05-20 16:52
|
||||
@ -148,7 +148,7 @@ Digital Name Receive Transmit Power Scan TOT RO Admit Color Slot
|
||||
# 7) Transmit timeout timer in seconds: 0, 15, 30, 45... 555
|
||||
# 8) Receive only: -, +
|
||||
# 9) Admit criteria: -, Free, Tone
|
||||
# 10) Squelch level: Normal, Tight
|
||||
# 10) Squelch level: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
|
||||
# 11) Guard tone for receive, or '-' to disable
|
||||
# 12) Guard tone for transmit, or '-' to disable
|
||||
# 13) Bandwidth in kHz: 12.5, 20, 25
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Configuration generated 2018/11/12 by dmrconfig, version 0.9.193
|
||||
# Configuration generated 2018/11/21 by dmrconfig, version 0.9.193
|
||||
#
|
||||
Radio: Baofeng RD-5R
|
||||
Last Programmed Date: 0000-00-00 00:00
|
||||
@ -14,7 +14,7 @@ Last Programmed Date: 0000-00-00 00:00
|
||||
# 7) Transmit timeout timer in seconds: 0, 15, 30, 45... 555
|
||||
# 8) Receive only: -, +
|
||||
# 9) Admit criteria: -, Free, Tone
|
||||
# 10) Squelch level: Normal, Tight
|
||||
# 10) Squelch level: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
|
||||
# 11) Guard tone for receive, or '-' to disable
|
||||
# 12) Guard tone for transmit, or '-' to disable
|
||||
# 13) Bandwidth in kHz: 12.5, 20, 25
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Configuration generated 2018/11/12 by dmrconfig, version 0.9.193
|
||||
# Configuration generated 2018/11/21 by dmrconfig, version 0.9.193
|
||||
#
|
||||
Radio: Baofeng RD-5R
|
||||
Last Programmed Date: 2018-04-23 15:10
|
||||
@ -38,7 +38,7 @@ Digital Name Receive Transmit Power Scan TOT RO Admit Color Slot
|
||||
# 7) Transmit timeout timer in seconds: 0, 15, 30, 45... 555
|
||||
# 8) Receive only: -, +
|
||||
# 9) Admit criteria: -, Free, Tone
|
||||
# 10) Squelch level: Normal, Tight
|
||||
# 10) Squelch level: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
|
||||
# 11) Guard tone for receive, or '-' to disable
|
||||
# 12) Guard tone for transmit, or '-' to disable
|
||||
# 13) Bandwidth in kHz: 12.5, 20, 25
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Configuration generated 2018/11/12 by dmrconfig, version 0.9.193
|
||||
# Configuration generated 2018/11/21 by dmrconfig, version 0.9.193
|
||||
#
|
||||
Radio: Baofeng RD-5R
|
||||
Last Programmed Date: 2018-05-16 14:41
|
||||
@ -55,7 +55,7 @@ Digital Name Receive Transmit Power Scan TOT RO Admit Color Slot
|
||||
# 7) Transmit timeout timer in seconds: 0, 15, 30, 45... 555
|
||||
# 8) Receive only: -, +
|
||||
# 9) Admit criteria: -, Free, Tone
|
||||
# 10) Squelch level: Normal, Tight
|
||||
# 10) Squelch level: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
|
||||
# 11) Guard tone for receive, or '-' to disable
|
||||
# 12) Guard tone for transmit, or '-' to disable
|
||||
# 13) Bandwidth in kHz: 12.5, 20, 25
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Configuration generated 2018/11/12 by dmrconfig, version 0.9.193
|
||||
# Configuration generated 2018/11/21 by dmrconfig, version 0.9.193
|
||||
#
|
||||
Radio: Baofeng RD-5R
|
||||
Last Programmed Date: 2018-05-12 23:16
|
||||
@ -59,7 +59,7 @@ Digital Name Receive Transmit Power Scan TOT RO Admit Color Slot
|
||||
# 7) Transmit timeout timer in seconds: 0, 15, 30, 45... 555
|
||||
# 8) Receive only: -, +
|
||||
# 9) Admit criteria: -, Free, Tone
|
||||
# 10) Squelch level: Normal, Tight
|
||||
# 10) Squelch level: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
|
||||
# 11) Guard tone for receive, or '-' to disable
|
||||
# 12) Guard tone for transmit, or '-' to disable
|
||||
# 13) Bandwidth in kHz: 12.5, 20, 25
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Configuration generated 2018/11/12 by dmrconfig, version 0.9.193
|
||||
# Configuration generated 2018/11/21 by dmrconfig, version 0.9.193
|
||||
#
|
||||
Radio: Baofeng RD-5R
|
||||
Last Programmed Date: 2018-05-12 23:16
|
||||
@ -47,7 +47,7 @@ Digital Name Receive Transmit Power Scan TOT RO Admit Color Slot
|
||||
# 7) Transmit timeout timer in seconds: 0, 15, 30, 45... 555
|
||||
# 8) Receive only: -, +
|
||||
# 9) Admit criteria: -, Free, Tone
|
||||
# 10) Squelch level: Normal, Tight
|
||||
# 10) Squelch level: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
|
||||
# 11) Guard tone for receive, or '-' to disable
|
||||
# 12) Guard tone for transmit, or '-' to disable
|
||||
# 13) Bandwidth in kHz: 12.5, 20, 25
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Configuration generated 2018/11/12 by dmrconfig, version 0.9.193
|
||||
# Configuration generated 2018/11/21 by dmrconfig, version 0.9.193
|
||||
#
|
||||
Radio: Baofeng RD-5R
|
||||
Last Programmed Date: 2018-07-05 16:02
|
||||
@ -66,7 +66,7 @@ Digital Name Receive Transmit Power Scan TOT RO Admit Color Slot
|
||||
# 7) Transmit timeout timer in seconds: 0, 15, 30, 45... 555
|
||||
# 8) Receive only: -, +
|
||||
# 9) Admit criteria: -, Free, Tone
|
||||
# 10) Squelch level: Normal, Tight
|
||||
# 10) Squelch level: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
|
||||
# 11) Guard tone for receive, or '-' to disable
|
||||
# 12) Guard tone for transmit, or '-' to disable
|
||||
# 13) Bandwidth in kHz: 12.5, 20, 25
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Configuration generated 2018/11/12 by dmrconfig, version 0.9.193
|
||||
# Configuration generated 2018/11/21 by dmrconfig, version 0.9.193
|
||||
#
|
||||
Radio: Baofeng RD-5R
|
||||
Last Programmed Date: 2018-05-12 23:16
|
||||
@ -49,7 +49,7 @@ Digital Name Receive Transmit Power Scan TOT RO Admit Color Slot
|
||||
# 7) Transmit timeout timer in seconds: 0, 15, 30, 45... 555
|
||||
# 8) Receive only: -, +
|
||||
# 9) Admit criteria: -, Free, Tone
|
||||
# 10) Squelch level: Normal, Tight
|
||||
# 10) Squelch level: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
|
||||
# 11) Guard tone for receive, or '-' to disable
|
||||
# 12) Guard tone for transmit, or '-' to disable
|
||||
# 13) Bandwidth in kHz: 12.5, 20, 25
|
||||
|
22
gd77.c
22
gd77.c
@ -142,7 +142,10 @@ typedef struct {
|
||||
_unused50_6 : 2; // 0
|
||||
|
||||
// Byte 51
|
||||
uint8_t _unused51_0 : 1, // 0
|
||||
uint8_t squelch : 1, // Squelch
|
||||
#define SQ_TIGHT 0
|
||||
#define SQ_NORMAL 1
|
||||
|
||||
bandwidth : 1, // Bandwidth: 12.5 or 25 kHz
|
||||
#define BW_12_5_KHZ 0
|
||||
#define BW_25_KHZ 1
|
||||
@ -156,8 +159,7 @@ typedef struct {
|
||||
#define POWER_LOW 0
|
||||
|
||||
// Bytes 52-55
|
||||
uint8_t _unused52[3]; // 0
|
||||
uint8_t squelch; // Squelch: 0...9
|
||||
uint8_t _unused52[4]; // 0
|
||||
|
||||
} channel_t;
|
||||
|
||||
@ -314,6 +316,7 @@ typedef struct {
|
||||
} msgtab_t;
|
||||
|
||||
static const char *POWER_NAME[] = { "Low", "High" };
|
||||
static const char *SQUELCH_NAME[] = { "Tight", "Normal" };
|
||||
static const char *BANDWIDTH[] = { "12.5", "25" };
|
||||
static const char *CONTACT_TYPE[] = {"Group", "Private", "All", "???" };
|
||||
static const char *ADMIT_NAME[] = { "-", "Free", "Color", "???" };
|
||||
@ -792,7 +795,6 @@ static void erase_channel(int i)
|
||||
ch->_unused50_6 = 0;
|
||||
|
||||
// Byte 51
|
||||
ch->_unused51_0 = 0;
|
||||
ch->bandwidth = BW_25_KHZ;
|
||||
ch->rx_only = 0;
|
||||
ch->talkaround = 0;
|
||||
@ -804,7 +806,8 @@ static void erase_channel(int i)
|
||||
ch->_unused52[0] = 0;
|
||||
ch->_unused52[1] = 0;
|
||||
ch->_unused52[2] = 0;
|
||||
ch->squelch = 5;
|
||||
ch->_unused52[3] = 0;
|
||||
ch->squelch = SQ_NORMAL;
|
||||
|
||||
// Clear valid bit.
|
||||
b->bitmap[i % 128 / 8] &= ~(1 << (i & 7));
|
||||
@ -1092,7 +1095,7 @@ static void print_analog_channels(FILE *out, int verbose)
|
||||
// CTCSS/DCS Dec
|
||||
// CTCSS/DCS Enc
|
||||
// Bandwidth
|
||||
fprintf(out, "%-7d ", ch->squelch <= 9 ? ch->squelch : 5);
|
||||
fprintf(out, "%-7s ", SQUELCH_NAME[ch->squelch]);
|
||||
print_tone(out, ch->ctcss_dcs_receive);
|
||||
fprintf(out, " ");
|
||||
print_tone(out, ch->ctcss_dcs_transmit);
|
||||
@ -1704,8 +1707,11 @@ badtx: fprintf(stderr, "Bad transmit frequency.\n");
|
||||
}
|
||||
}
|
||||
|
||||
squelch = atoi(squelch_str);
|
||||
if (squelch < 0 || squelch > 9) {
|
||||
if (strcasecmp ("Normal", squelch_str) == 0) {
|
||||
squelch = SQ_NORMAL;
|
||||
} else if (strcasecmp ("Tight", squelch_str) == 0) {
|
||||
squelch = SQ_TIGHT;
|
||||
} else {
|
||||
fprintf (stderr, "Bad squelch level.\n");
|
||||
return 0;
|
||||
}
|
||||
|
2
rd5r.c
2
rd5r.c
@ -1068,7 +1068,7 @@ static void print_analog_channels(FILE *out, int verbose)
|
||||
fprintf(out, "# 7) Transmit timeout timer in seconds: 0, 15, 30, 45... 555\n");
|
||||
fprintf(out, "# 8) Receive only: -, +\n");
|
||||
fprintf(out, "# 9) Admit criteria: -, Free, Tone\n");
|
||||
fprintf(out, "# 10) Squelch level: Normal, Tight\n");
|
||||
fprintf(out, "# 10) Squelch level: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9\n");
|
||||
fprintf(out, "# 11) Guard tone for receive, or '-' to disable\n");
|
||||
fprintf(out, "# 12) Guard tone for transmit, or '-' to disable\n");
|
||||
fprintf(out, "# 13) Bandwidth in kHz: 12.5, 20, 25\n");
|
||||
|
Loading…
Reference in New Issue
Block a user