• AVR Freaks

MCHPFSUSB v2.5 Released

Author
USBApplicationsTeam
Moderator
  • Total Posts : 7
  • Reward points : 0
  • Joined: 2009/05/28 08:40:17
  • Location: 0
  • Status: offline
2009/07/14 16:54:26 (permalink)
0

MCHPFSUSB v2.5 Released

What's New/Updated in Release v2.5
  • Device
    • USB Device – Audio – MIDI example added
    • USB Device – Composite – MSD + CDC example added
    • USB Device – HID - Joystick example added
    • USB Device – HID - Pen Digitizer example added
    • USB Device – HID - Multi-Touch Digitizer example added
    • USB Device – HID - Uninterruptible Power Supply example added
    • USB Device – WinUSB – High Bandwidth example added
    • USB Dual Role – MSD host + HID device example added

  • Bug fixes in both host and device stacks.

For more information about Microchip's USB offerings please refer to www.microchip.com/usb

For support, please contact http://support.microchip.com
#1

17 Replies Related Threads

    Philbot
    New Member
    • Total Posts : 15
    • Reward points : 0
    • Joined: 2009/07/20 05:23:16
    • Location: 0
    • Status: offline
    RE: MCHPFSUSB v2.5 Released 2009/07/20 05:58:01 (permalink)
    0
    I was pretty excited when I read this post...
     
    ...  Until I looked at the release notes.
     
    How come only 3 of the 11 USB host examples are supported on the PIC32 USB Starter Kit?
     
    Are these coming, or is PIC32 not really the way to go for USB Host applications?
    When I went looking for a USB Host platform a few months back it seemed like PIC32 was the direction Microchip was going.
     
    ps: If you are looking for a killer example to code for PIC32, consider a USB HOST that can read a PSP or Logitech game controller.
     
    Thanks.
    Phil.
    #2
    h0m3l355
    Moderator
    • Total Posts : 83
    • Reward points : 0
    • Joined: 2007/07/31 14:45:25
    • Status: offline
    RE: MCHPFSUSB v2.5 Released 2009/07/20 11:04:28 (permalink)
    0
    Philbot,
     
    I think the problem is the PIC32 starter kit has limited hardware available on the board (3 buttons and 3 LEDs).  The demos use hardware that just isn't available on the PIC32 Starter Kit.
     
    The following host demos require an LCD interface:
    • USB Host – CDC – Serial Demo
    • USB Host – HID – Keyboard
    • USB Host – HID – Mouse
    • USB Host – MCHPUSB – Generic Driver Demo

    The following host demos require the Graphics Display board (this might work with the I/O Expansion board and maybe a little modification?  http://www.microchipdirect.com/productsearch.aspx?Keywords=AC164127-3 seems to say it should work... maybe untested? ):
    • USB Host – Printer – Print Screen Demo

    The following demo requires a RS232 port:
    • USB Host – Mass Storage – Thumb Drive Data Logger

    The following host demos should work with little modifications but are not listed as supported yet in the release notes:
    • USB Dual Role – MSD host + HID device
    • USB Host – Charger – Simple Charger

     
    #3
    Philbot
    New Member
    • Total Posts : 15
    • Reward points : 0
    • Joined: 2009/07/20 05:23:16
    • Location: 0
    • Status: offline
    RE: MCHPFSUSB v2.5 Released 2009/07/26 14:52:16 (permalink)
    0
    Thanks for the info.
     
    Although the USB Starter board is short on hardware, it does have a pretty capable USB debugger which is good for basic diagnostics and testing.
     
    I wanted to see what it would take to get a USB host up and running (as a bare minimum), but I really don't need a fancy display. 
    I can just use printfs to verify functionality.  The odd LED would also help.
     
    I don't find it easy to adapt the code from different platforms, so having a canned HOST application TARGETED for the Starter board is where I needed to start.
     
    Some of the Starter Kit applications seem to be ported from the Pic24, with the intent to switch between either uart2 or USB debug, but it's not quite there yet....  It took some creative juggling.
     
    I was hoping that would be more turnkey on the latest release.
     
    Bottom line....
     
    If you're going to sell a product and call it the PIC32 Starter Board...
       expect that people will buy it, with the expectation of  being able to "get started" with it :)
     
    I'll keep plugging away....   
     
     
     
     
     
     
    #4
    Philbot
    New Member
    • Total Posts : 15
    • Reward points : 0
    • Joined: 2009/07/20 05:23:16
    • Location: 0
    • Status: offline
    RE: MCHPFSUSB v2.5 Released 2009/07/26 20:09:59 (permalink)
    0
    OK, I got so far and now I'm stumped again.
     
    I started out with the "USB HOST - HID- Mouse" example in the MCHPFSUSB packet.
     
    Built it, downloaded it and really couldn't see anything when I connected a mouse device. (no LCD).
     
    OK, so I added some LEDs to the code.  It was initilizing the USB but never saw anything attach.
     
    I portd over the db_utils library and now I can add real debugging in via the usb serial debugging port.
     
    Bottom line, there just aren't any interrupts occuring.  No attach, no fails... just endless waiting for a device.
     
    If nothing else there should be a regular 1ms tick, but I can't even see that.
     
    With the "generic" Host application that came with the USB starter kit, I can see the ticks, and all the attach/detach processing.
     
    I've gone through all the registers and interupt handling code that I can find in usb_host.c and it all looks the same.  Where it differs a bit, I tried transplanting the working code form the starter kit lib.  No luck.
     
    Any have any ideas why the code "as shipped" wouldn't enable interrupts on the USB Starter kit?
    I checked the LCD code... no bit checking in there, just timing loops.    Maybe the missing uart? 
     
    My next attempt will be to port the HID code over to the Starter Kit code, but I'm not looking forward to that, because the new MCHPFSUSB code has a lot of additions to it that I'm sure will break my working code.
     
    My brain hurts.
     
    #5
    shanjun
    New Member
    • Total Posts : 15
    • Reward points : 0
    • Joined: 2009/05/20 07:58:29
    • Location: Singapore
    • Status: offline
    RE: MCHPFSUSB v2.5 Released 2009/07/26 23:46:07 (permalink)
    0
    A few very basic questions: Does the audio Midi sample code supports real-time audio input from USB? If not, is there any existing microchip pic18 sample codes that support real-time audio input from USB? I am thinking along the line of building a USB microphone...

    Thank you
    sj



    #6
    okhan
    New Member
    • Total Posts : 13
    • Reward points : 0
    • Joined: 2008/10/01 14:14:21
    • Location: 0
    • Status: offline
    RE: MCHPFSUSB v2.5 Released 2009/07/29 16:01:42 (permalink)
    0
    ORIGINAL: h0m3l355

    Philbot,

    I think the problem is the PIC32 starter kit has limited hardware available on the board (3 buttons and 3 LEDs).  The demos use hardware that just isn't available on the PIC32 Starter Kit.

    The following host demos require an LCD interface:
    • USB Host – CDC – Serial Demo
    • USB Host – HID – Keyboard
    • USB Host – HID – Mouse
    • USB Host – MCHPUSB – Generic Driver Demo

    The following host demos require the Graphics Display board (this might work with the I/O Expansion board and maybe a little modification?  http://www.microchipdirect.com/productsearch.aspx?Keywords=AC164127-3 seems to say it should work... maybe untested? ):
    • USB Host – Printer – Print Screen Demo

    The following demo requires a RS232 port:
    • USB Host – Mass Storage – Thumb Drive Data Logger

    The following host demos should work with little modifications but are not listed as supported yet in the release notes:
    • USB Dual Role – MSD host + HID device
    • USB Host – Charger – Simple Charger





    I don't think the PIC32 starter Kit has anything to do with it. Microchip has a development board called Explorer16 which contains an LCD and RS232 port. You can get plug in modules for different PIC18s, PIC24s, and PIC32 to be the MCU on this dev board. Most of the examples in the Libraries are actually geared towards the Explorer16. So unless there are technical issues, or the engineers don't have enough time to write the examples before making the v2.5 release, there really is no reason PIC32 does not have above mentioned examples.
    #7
    okhan
    New Member
    • Total Posts : 13
    • Reward points : 0
    • Joined: 2008/10/01 14:14:21
    • Location: 0
    • Status: offline
    RE: MCHPFSUSB v2.5 Released 2009/07/29 16:10:12 (permalink)
    0
    Sorry, missed that Phillbot had asked specifically about the PIC32 Starter Kit Support Smile
    #8
    Sifar
    New Member
    • Total Posts : 1
    • Reward points : 0
    • Joined: 2008/09/05 21:25:35
    • Location: 0
    • Status: offline
    RE: MCHPFSUSB v2.5 Released 2009/08/03 10:19:53 (permalink)
    0
    The "USB HOST - HID- Mouse" basically needs a LCD to display the X & Y axis co-ordinates and mouse clicks.
    The projectfor this demo in the latest package are meant for PIC32 and PIC24 PIMS used in conjunction with Explorer 16 board.


    ORIGINAL: Philbot

    OK, I got so far and now I'm stumped again.

    I started out with the "USB HOST - HID- Mouse" example in the MCHPFSUSB packet.

    Built it, downloaded it and really couldn't see anything when I connected a mouse device. (no LCD).

    OK, so I added some LEDs to the code.  It was initilizing the USB but never saw anything attach.

    I portd over the db_utils library and now I can add real debugging in via the usb serial debugging port.

    Bottom line, there just aren't any interrupts occuring.  No attach, no fails... just endless waiting for a device.

    If nothing else there should be a regular 1ms tick, but I can't even see that.

    With the "generic" Host application that came with the USB starter kit, I can see the ticks, and all the attach/detach processing.

    I've gone through all the registers and interupt handling code that I can find in usb_host.c and it all looks the same.  Where it differs a bit, I tried transplanting the working code form the starter kit lib.  No luck.

    Any have any ideas why the code "as shipped" wouldn't enable interrupts on the USB Starter kit?
    I checked the LCD code... no bit checking in there, just timing loops.    Maybe the missing uart? 

    My next attempt will be to port the HID code over to the Starter Kit code, but I'm not looking forward to that, because the new MCHPFSUSB code has a lot of additions to it that I'm sure will break my working code.

    My brain hurts.

    #9
    jtoebes
    New Member
    • Total Posts : 18
    • Reward points : 0
    • Joined: 2009/06/02 06:09:39
    • Status: offline
    RE: MCHPFSUSB v2.5 Released 2009/08/04 05:36:36 (permalink)
    0
    I'm seeing exactly the same situation here with attaching a flash drive.  From the debugging I have done, I can see that interrupts are turned off right before it tells me Host Reset complete (expected behavior) in _USB1Interrupt with this line


                numTimerInterrupts--;
                if (numTimerInterrupts == 0)
                {
                    // Turn off the timer interrupt.
                    U1OTGIEbits.T1MSECIE = 0;

                    // Advance to the next state.  We can do this here, because the only time
                    // we'll get a time interrupt is while we are in one of the holding states.
                    _USB_SetNextSubSubState();
                }


    So far so good.  Now subsequently it calls USBHostMSDInitialize when it recognizes that it has the drive and in that code when it goes to request the LUN you see this code:

                                // Initiate the request to get the max LUN.  If we can't initiate the request,
                                // then we can't enumerate the device.
                                errorCode = USBHostIssueDeviceRequest( deviceInfoMSD[device].deviceAddress,
                                        USB_SETUP_DEVICE_TO_HOST | USB_SETUP_TYPE_CLASS | USB_SETUP_RECIPIENT_INTERFACE,
                                        USB_MSD_GET_MAX_LUN, 0, deviceInfoMSD[device].interface, 1, deviceInfoMSD[device].blockData,
                                        USB_DEVICE_REQUEST_GET, deviceInfoMSD[i].clientDriverID );

    So this code looks to be reasonable, BUT if you pay attention to the last parameter, you will notice that it uses i instead of device to index the deviceInfoMSD array.  So if you change that code to be:

                                // Initiate the request to get the max LUN.  If we can't initiate the request,
                                // then we can't enumerate the device.
                                errorCode = USBHostIssueDeviceRequest( deviceInfoMSD[device].deviceAddress,
                                        USB_SETUP_DEVICE_TO_HOST | USB_SETUP_TYPE_CLASS | USB_SETUP_RECIPIENT_INTERFACE,
                                        USB_MSD_GET_MAX_LUN, 0, deviceInfoMSD[device].interface, 1, deviceInfoMSD[device].blockData,
                                        USB_DEVICE_REQUEST_GET, deviceInfoMSD[device].clientDriverID );

    you should get better behavior
    #10
    XsavioR
    Super Member
    • Total Posts : 338
    • Reward points : 0
    • Joined: 2008/07/21 16:56:38
    • Location: Chicago
    • Status: offline
    RE: MCHPFSUSB v2.5 Released 2009/08/30 10:31:56 (permalink)
    0
    ORIGINAL: shanjun

    A few very basic questions: Does the audio Midi sample code supports real-time audio input from USB? If not, is there any existing microchip pic18 sample codes that support real-time audio input from USB? I am thinking along the line of building a USB microphone...

    Thank you
    sj


    Usb mic example code is in the audio class specification. page 105.  I think this would be the place to start. It is where we started for the midi example. that is after getting headaches working with CDC.
    source:
    http://www.usb.org/developers/devclass_docs
    post edited by XsavioR - 2009/08/30 13:55:24
    #11
    paofer
    New Member
    • Total Posts : 26
    • Reward points : 0
    • Joined: 2007/01/29 08:10:31
    • Location: 0
    • Status: offline
    RE: MCHPFSUSB v2.5 Released 2009/10/17 02:10:46 (permalink)
    0
    Hi all,
    I'm trying to compile the USB MSD on SDCard for a PIC18F4550.
    I'm using the "USB Device - Mass Storage - SD Card reader" example (found with "Microchip Application Libraries v2009-08-31") configured for a FSUSB PICDEM board, but I'm not able to compile it(I'm using mcc18 v3.34).

    The first error was that the define of GetInstructionClock() and GetSystemClock() was not present in "HardwareProfile.h" nor "HardwareProfile - PICDEM FSUSB.h".

    Once fixed this issue (added the defines in "HardwareProfile - PICDEM FSUSB.h") the problem was that all the define for SPI was not present (eg: SD_CS, SPICON1 etc.).

    I added the defines to "HardwareProfile - PICDEM FSUSB.h" but the project still don't buil because of sintax error on "usb_ch9.h" (mcc18 compiler don't recognize __attribute__ ((packed)) on typedef struct definition). I removed every __attribute__ ((packed)) from the include file and still don't compile because of syntax error in the following line code:

    extern CLIENT_DRIVER_TABLE usbMediaInterfaceTable;  // This table contains the initialization

    in "usb_host_msd.c" source file

    Before I spend other hours trying to compile I would like to know if there's anybody compiled the project and if I'm wrong in anything.

    The sad thing is that previous version of MCHPUSB Framework (v2.3) worked fine on PIC18F4550 (both on Proteus simulator and phisical board).

    My question is: Microchip don't debug new libraries any more?

    Years ago I did choise Microchip because of tons of free example code and application library found on Microchip homepage, but some of the last releases (both software and silicon) are really bugged. I hope Microchip fix early most of the bugs present on library and silicon devices because I would not to learn about another brand of microcontroller (compiler, libraries and devices).

    #12
    HaroldHallikainen
    Super Member
    • Total Posts : 494
    • Reward points : 0
    • Joined: 2003/11/07 12:36:50
    • Status: offline
    RE: MCHPFSUSB v2.5 Released 2009/11/19 10:09:51 (permalink)
    0
    I just installed the new library. On one of my existing projects, I get the following error when I compile:

    In file included from main.c:15:
    C:/Microchip Solutions/Microchip/Include/USB/usb_device.h:163: error: `EVENT_DEVICE_STACK_BASE' undeclared here (not in a function)


    Is there another header I need to include?

    THANKS!

    Harold



    FCC Rules updated daily at http://www.hallikainen.com
    #13
    skalarki
    New Member
    • Total Posts : 21
    • Reward points : 0
    • Joined: 2009/05/31 06:37:03
    • Location: 0
    • Status: offline
    RE: MCHPFSUSB v2.5 Released 2009/11/22 05:11:43 (permalink)
    0
    Hi Hopefully in right place I am posting this issue

    I am stuck with this task ....
    I have simple programm with USB FW 1.3 and is working fine, but when I am trying to do the same using USB FW 2.5 something is rong and I can't figure it out what.
    Mainly something is wrong with EP02 activation or definitions or something else.
    This is my USB FW 1.3 code
    /* Configuration 1 Descriptor */
    CFG01=
    {
    /* Configuration Descriptor */
    sizeof(USB_CFG_DSC), // Size of this descriptor in bytes
    DSC_CFG, // CONFIGURATION descriptor type
    sizeof(cfg01), // Total length of data for this cfg
    1, // Number of interfaces in this cfg
    1, // Index value of this configuration
    0, // Configuration string index
    _DEFAULT, // Attributes, see usbdefs_std_dsc.h
    50, // Max power consumption (2X mA)

    /* Interface Descriptor */
    sizeof(USB_INTF_DSC), // Size of this descriptor in bytes
    DSC_INTF, // INTERFACE descriptor type
    0, // Interface Number
    0, // Alternate Setting Number
    3, // Number of endpoints in this intf
    0x00, // Class code
    0x00, // Subclass code
    0x00, // Protocol code
    0, // Interface string index

    /* Endpoint Descriptors */
    sizeof(USB_EP_DSC),DSC_EP,_EP01_OUT,_INT,USBGEN_EP_SIZE,32,
    sizeof(USB_EP_DSC),DSC_EP,_EP01_IN,_INT,USBGEN_EP_SIZE,32,
    sizeof(USB_EP_DSC),DSC_EP,_EP02_IN,_INT,USBINT_EP_SIZE,32
    };


    and this is my USB FW 2.5 endpoints config

    /* Configuration 1 Descriptor */
    ROM BYTE configDescriptor1[]={
    /* Configuration Descriptor */
    0x09,//sizeof(USB_CFG_DSC), // Size of this descriptor in bytes
    USB_DESCRIPTOR_CONFIGURATION, // CONFIGURATION descriptor type
    0x20,0x00, // Total length of data for this cfg
    1, // Number of interfaces in this cfg
    1, // Index value of this configuration
    0, // Configuration string index
    _DEFAULT | _SELF, // Attributes, see usb_device.h
    50, // Max power consumption (2X mA)

    /* Interface Descriptor */
    0x09,//sizeof(USB_INTF_DSC), // Size of this descriptor in bytes
    USB_DESCRIPTOR_INTERFACE, // INTERFACE descriptor type
    0, // Interface Number
    0, // Alternate Setting Number
    4, // Number of endpoints in this intf
    0xFF, // Class code
    0xFF, // Subclass code
    0xFF, // Protocol code
    0, // Interface string index

    /* Endpoint Descriptor */
    0x07, /*sizeof(USB_EP_DSC)*/
    USB_DESCRIPTOR_ENDPOINT, //Endpoint Descriptor
    _EP01_OUT, //EndpointAddress
    _BULK, //Attributes
    USBGEN_EP_SIZE,0x00, //size
    1, //Interval

    0x07, /*sizeof(USB_EP_DSC)*/
    USB_DESCRIPTOR_ENDPOINT, //Endpoint Descriptor
    _EP01_IN, //EndpointAddress
    _BULK, //Attributes
    USBGEN_EP_SIZE,0x00, //size
    1, //Interval

    0x07, /*sizeof(USB_EP_DSC)*/
    USB_DESCRIPTOR_ENDPOINT, //Endpoint Descriptor
    _EP02_OUT, //EndpointAddress
    _INT, //Attributes
    USBINT_EP_SIZE,0x00, //size
    1, //Interval

    0x07, /*sizeof(USB_EP_DSC)*/
    USB_DESCRIPTOR_ENDPOINT, //Endpoint Descriptor
    _EP02_IN, //EndpointAddress
    _INT, //Attributes
    USBINT_EP_SIZE,0x00, //size
    1 //Interval
    };


    and EP activation

    void USBCBInitEP(void)
    {
    USBEnableEndpoint(USBGEN_EP_NUM,USB_OUT_ENABLED|USB_IN_ENABLED|USB_HANDSHAKE_ENABLED|USB_DISALLOW_SETUP);
    USBGenericOutHandle = USBGenRead(USBGEN_EP_NUM,(BYTE*)&OUTPacket,USBGEN_EP_SIZE);
    USBEnableEndpoint(USBINT_EP_NUM,USB_OUT_ENABLED|USB_IN_ENABLED|USB_HANDSHAKE_ENABLED|USB_DISALLOW_SETUP);
    USBGenericOutHandle = USBIntRead(USBINT_EP_NUM,(BYTE*)&OUTPacket,USBINT_EP_SIZE);
    }


    Can anybody kindly halp me where I am doing something not right, please.

    Thanks
    Marcin
    #14
    jallwork
    New Member
    • Total Posts : 15
    • Reward points : 0
    • Joined: 2009/07/17 08:19:37
    • Location: 0
    • Status: offline
    RE: MCHPFSUSB v2.5 Released 2009/11/24 07:17:20 (permalink)
    0
    Why is it so difficult to find MCHPFSUSB v2.5? (or any version?)
    Type this into Microchip search engine - this brings up one hit in the forums
    Microchip Technology User Forums
     16, 2009 4:36:15 AM otterpop81. From where to start after installing MCHPFSUSB
    v2.5? 5, muzammil_IIEE, 131, Aug. 20, 2009 8:45:22 PM mambrose.
    http://www.microchip.com/forums/tt.aspx?forumid=102&p=4&tmode=12&smode=1
    I don't really want to trawl through the forums...

    Try it without the version number
    The first takes you to the page:
    http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2680&dDocName=en537044
    and you're tempted with an underlined link: 'MCHPFSUSB Framework v2.6' !
    This doesn't work.
    The second takes you to: http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2651&param=en534494
    Where there's a link to the software
    It takes you to:
    http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2680&dDocName=en537044
    (Getting the idea?)
    The third is: Release Notes for MCHPFSUSB v1.3, not what I want
    Perhaps it'll tell me in the fourth: MCHPFSUSB Firmware User's Guide, but I dont' really want to read a pdf file..
    (and anyway I can't see in here where I get the software)
    The fifth takes me to:
    http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1486
    OK - click 'Software and tools'
    That goes to: http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2651&param=en534494
    (Haven't we been here before?) and that takes us to...
    None of the rest look promising
     
    OR go to Software from main page, select USB - Device and host
    Guess where it takes you?
    http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2680&dDocName=en537044
    Follow link to: USB Framework for PIC18, PIC24 & PIC32 (see above)

    Do I really have to download 77Meg of Microchip Application Libraries at the bottom of the page?
    Yours frustrated
    Good job I've got an old version somewhere..
     
    Or am I being REALLY stupid??
     
    #15
    Kabanga
    Super Member
    • Total Posts : 204
    • Reward points : 0
    • Joined: 2007/11/24 13:25:16
    • Location: 0
    • Status: offline
    RE: MCHPFSUSB v2.5 Released 2009/11/24 07:31:10 (permalink)
    0
    You are not stupid!
    Just download the Microchip Application Libraries installer (zip).
    Install it and you'll have the MCHPFSUS v.2.6 (newest one) and all Microchip Libraries (Graphics, TCP IP .....) available.
    So, it's now a kind of All-in-one!



    Best regards
    Kabanga
    #16
    jallwork
    New Member
    • Total Posts : 15
    • Reward points : 0
    • Joined: 2009/07/17 08:19:37
    • Location: 0
    • Status: offline
    RE: MCHPFSUSB v2.5 Released 2009/11/24 08:28:15 (permalink)
    0
    Thanks! I'll try it
     
    Having checked, my MCHPFSUSB folder is 112Meg.
     
    BUT Microchip could make it a bit more obvious.
     
    Regards
     
    JohnA
    #17
    Drmn4ea
    New Member
    • Total Posts : 29
    • Reward points : 0
    • Joined: 2006/10/03 08:46:22
    • Location: 0
    • Status: offline
    RE: MCHPFSUSB v2.5 Released 2009/12/02 10:27:06 (permalink)
    0
    On a related note, is there any file - anywhere - that documents what has been changed / bugs fixed in each new version of the framework? The 2.6 download has a "Migration guide" section and bullet-point list of new demos/stuff added to the download, but where is the file that tells me if the 2.6 framework fixes any of the specific bugs I've been encountering in 2.4, or whether it's worthwhile to spend all day migrating my project to the new version, or else, the specific fixes I could apply with less invasive surgery?
    #18
    Jump to:
    © 2020 APG vNext Commercial Version 4.5