Well Sam, it's a long story......

The shorter version is I had trouble commanding the XCAT. After lots of messing about I found that if I connected to the XCAT with a Wndoze machine
set the config, and played with it for a while, the first time I tried with app_rpt it worked. But not afterward.....

So I made up a little set config function into app_rpt.c and called it when commanding the XCAT.
Yep, it's a patch to gloss over something else. But it got it working.
Nothing earth shattering. But I've had it working and on the air for a year or two now.

Here's the set_config_xcat function:

static int set_config_xcat(struct rpt *myrpt)
{
    unsigned char cmdstr[10];

        /*set the fixed XCAT Config */
        cmdstr[0] = cmdstr[1] = 0xfe;
        cmdstr[2] = myrpt->p.civaddr;
        cmdstr[3] = 0xe0;
        cmdstr[4] = 0xaa;    /* Set config command    */
        cmdstr[5] = 0x04;       /* Sub command           */
        cmdstr[6] = 0x03;       /* 440 Band - use for 2m and don't send COS*/
        cmdstr[7] = 0x00;    /* No user bits set      */
        cmdstr[8] = 0xfd;
        return(civ_cmd(myrpt,cmdstr,9));

}


And put a  call to the new function into set_xcat :


static int set_xcat(struct rpt *myrpt)
{
    int res = 0;
    
             /* Set XCAT Fixed config */
        if(debug)
                printf("Setting XCAT Config\n");
        if (!res)
                res = set_config_xcat(myrpt);

    /* select XCAT Mode/Channel 1 */
    if(debug)
        printf("Setting XCAT to Mode 1\n");
    if (!res)
        res = simple_command_xcat(myrpt,8,1);

    /* set Freq */

    if(debug)
        printf("Frequency\n");
    if(res)
        res = set_freq_xcat(myrpt, myrpt->freq);        

    if(debug)
        printf("Offset\n");
    if(!res)
        res = set_offset_xcat(myrpt, myrpt->offset);    /* Offset */
    if(debug)
        printf("CTCSS\n");
    if (!res)
        res = set_ctcss_freq_xcat(myrpt, myrpt->txplon ? myrpt->txpl : "0.0",
            myrpt->rxplon ? myrpt->rxpl : "0.0"); /* Tx/Rx CTCSS */
    /* set Freq */
    if(debug)
        printf("Frequency\n");
    if(!res)
        res = set_freq_xcat(myrpt, myrpt->freq);        


    return res;
}


To make things simpler for users, what I've done on the other nodes here in York County is add macros in each of their rpt.conf to command the agile base.
Example :
201=*428260*5201                      ;Select Channel 01 on 2m remote base
202=*428260*5202                      ;Select Channel 02 on 2m remote base
203=*428260*5203                      ;Select Channel 03 on 2m remote base

And for quicker access to certain channels, some macros where function code is the KHz of the frequency.
For example below, dialing *53520 on one of the other nodes, will connect to the agile base, and select the channel for 146.520.

3330 = *8401*328260*428260*5242#              ;Disc all & connect to 2m Base, change to 147.330
3520 = *8401*328260*428260*5217#              ;Disc all & connect to 2m Base, change to 146.520
3550 = *8401*328260*428260*5219#              ;Disc all & connect to 2m Base, change to 146.550
3580 = *8401*328260*428260*5221#              ;Disc all & connect to 2m Base, change to 146.580
3700 = *8401*328260*428260*5243#              ;Disc all & connect to 2m Base, change to 146.700

Something that I've been playing with lately using the agile base is to have a hub node with "archivedir=" set connect to the base every morning at 7AM.
Tune to marine channel 22 and record the daily Coast Guard Safety and Weather broadcast from Baltimore. Disconnect at 8 AM, put it into a tarball and shove that out to a convenient FTP server where I can grab it later in the day if I want to. I don't quite have everything working there yet.