forked from PAWPAW-Mirror/lib_xua
Initial file tidy-up. Created app_xua_simple.
This commit is contained in:
9
lib_xua/api/xua.h
Normal file
9
lib_xua/api/xua.h
Normal file
@@ -0,0 +1,9 @@
|
||||
|
||||
#ifndef __XUA_H__
|
||||
#define __XUA_H__
|
||||
|
||||
#include "xua_audio.h"
|
||||
|
||||
#include "xua_endpoint0.h"
|
||||
|
||||
#endif
|
||||
@@ -22,7 +22,7 @@
|
||||
* \param c_EANativeTransport_ctrl Optional chanend to be connected to EA Native
|
||||
* endpoint manager if present
|
||||
*/
|
||||
void Endpoint0(chanend c_ep0_out, chanend c_ep0_in, chanend c_audioCtrl,
|
||||
void XUA_Endpoint0(chanend c_ep0_out, chanend c_ep0_in, chanend c_audioCtrl,
|
||||
chanend ?c_mix_ctl,chanend ?c_clk_ctl, chanend ?c_EANativeTransport_ctr, client interface i_dfu ?dfuInterface
|
||||
VENDOR_REQUESTS_PARAMS_DEC_);
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
module_dfu
|
||||
==========
|
||||
|
||||
:scope: General Use
|
||||
:description: module_dfu
|
||||
:keywords: DFU
|
||||
:boards: XMOS USB Audio Reference Designes
|
||||
|
||||
Code providing firmware upgrade over USB.
|
||||
|
||||
./host provides an example of a host application for DFU. This is written and tested for OSX. LibUSB is used to aid cross-platform porting.
|
||||
@@ -1 +0,0 @@
|
||||
SOURCE_INCLUDE_DIRS=../host/xmosdfu
|
||||
@@ -1,18 +0,0 @@
|
||||
.. _usb_audiosec_building_xmos_dfu:
|
||||
|
||||
Building the XMOS DFU loader - macOS
|
||||
====================================
|
||||
|
||||
The XMOS DFU loader is provided as source as part of the USB Audio
|
||||
framework, located in sc_usb_audio/module_dfu/host/xmos_dfu_osx.
|
||||
|
||||
The loader is compiled using libusb, the code for the loader is contained in the
|
||||
file ``xmosdfu.cpp``
|
||||
|
||||
To build the loader a Makefile is provided, which can be run as follows:
|
||||
|
||||
``make -f Makefile.OSX all``
|
||||
|
||||
This Makefile contains the following:
|
||||
|
||||
.. literalinclude:: Makefile.OSX
|
||||
@@ -1,91 +0,0 @@
|
||||
Creating factory and upgrade images with XFLASH
|
||||
===============================================
|
||||
|
||||
Installing the factory image to the device
|
||||
------------------------------------------
|
||||
|
||||
The DFU device interface is enabled by default in the XMOS USB Audio framework
|
||||
(see ``devicedefines.h``), and explicitly enabled in each reference design
|
||||
by the following line included in the ``customdefines.h`` file of each
|
||||
application::
|
||||
|
||||
#define DFU (1)
|
||||
|
||||
Use the XMOS Development Tools to run the command:
|
||||
|
||||
``xflash --boot-partition-size 0x30000 --factory usb_audio.xe``
|
||||
|
||||
Where the size passed using the ``--boot-partition-size n`` argument specifies
|
||||
in bytes the minimum size required to store the boot loader, factory image and
|
||||
any upgrade images.
|
||||
|
||||
The following can be used as a guide to help calculate the required boot
|
||||
partition size for a design:
|
||||
|
||||
- boot partition size = loader size + maximum size of factory image +
|
||||
maximum size of upgrade images + padding to sector boundaries
|
||||
|
||||
Where:
|
||||
|
||||
- loader size = 0x1000 bytes, or 0x4000 bytes if secure boot functionality is
|
||||
used (for tools version 13.1.0 and older)
|
||||
- maximum size of factory image = number of xCORE tiles *
|
||||
xCORE SRAM size
|
||||
- maximum size of upgrade images = (number of xCORE tiles *
|
||||
xCORE SRAM size) * number of images to be held in flash concurrently
|
||||
|
||||
The above example sets the boot partition to a size appropriate for designs
|
||||
based on a single xCORE tile, where a single upgrade image is required
|
||||
in flash at any one time.
|
||||
|
||||
This programs the factory default firmware image into the flash device.
|
||||
The device will now support the DFU mechanism, and can use it to safely receive
|
||||
firmware updates, as well as revert to the factory firmware image when required,
|
||||
such as in the event of a failed upgrade attempt.
|
||||
|
||||
Creating the upgrade image
|
||||
--------------------------
|
||||
|
||||
To use the firmware upgrade mechanism you need to build a firmware upgrade
|
||||
image:
|
||||
|
||||
#. Edit the ``customdefines.h`` file of the application for the hardware in use,
|
||||
and change the Device Version Number by defining ``BCD_DEVICE``.
|
||||
#. Rebuild the application.
|
||||
|
||||
To generate the firmware upgrade image run the following command:
|
||||
|
||||
``xflash --factory-version 13 --upgrade 1 usb_audio.xe -o new_firmware.bin``
|
||||
|
||||
Where the tools version passed using the ``--factory-version version``
|
||||
argument specifies the version of the tools used to create the factory image.
|
||||
This should be passed as ``12`` for images created using tools versions 10, 11
|
||||
and 12.
|
||||
|
||||
The ``--upgrade id xe-file [size]`` argument specifies xe-file as an upgrade
|
||||
image with version ``id``. Each version number must be a unique number greater
|
||||
than 0.
|
||||
|
||||
You should now have the file ``new_firmware.bin`` which contains the
|
||||
firmware with the newly specified Device Version Number.
|
||||
|
||||
Related documents
|
||||
-----------------
|
||||
|
||||
.. only :: latex
|
||||
|
||||
For further details of the DFU features included in the XMOS USB Audio
|
||||
framework and their configuration please see the "Device Firmware Upgrade
|
||||
(DFU)" (:ref:`usb_audio_sec_dfu`) and the "Configuration Defines"
|
||||
(:ref:`sec_custom_defines_api`) sections of the USB Audio Design Guide.
|
||||
|
||||
.. only :: html
|
||||
|
||||
For further details of the DFU features included in the XMOS USB Audio
|
||||
framework and their configuration please see the :ref:`usb_audio_sec_dfu`
|
||||
and the :ref:`sec_custom_defines_api` sections of the USB Audio Design
|
||||
Guide.
|
||||
|
||||
For further details on the use of XFLASH to create factory and upgrade firmware
|
||||
images please see the XFLASH Command-Line Manual section of the
|
||||
`xTIMEcomposer User Guide <https://www.xmos.com/published/xtimecomposer-user-guide>`_.
|
||||
@@ -1,10 +0,0 @@
|
||||
DFU loader for XMOS USB AUDIO devices
|
||||
=====================================
|
||||
|
||||
.. toctree::
|
||||
|
||||
Overview <overview>
|
||||
Creating factory and upgrade images with XFLASH <factory_image>
|
||||
Using the DFU loader - Windows (via the Thesycon driver) <thesycon_dfu>
|
||||
Using the DFU loader - macOS (via the XMOS DFU loader) <xmos_dfu>
|
||||
Building the XMOS DFU loader - macOS <building_xmos_dfu>
|
||||
@@ -1,21 +0,0 @@
|
||||
Overview
|
||||
========
|
||||
|
||||
The DFU loader is a flash device firmware upgrade mechanism. To work correctly
|
||||
your development board must contain the latest DFU enabled firmware.
|
||||
|
||||
The firmware upgrade for XMOS USB devices implementation uses the USB standard
|
||||
DFU device class mechanism and is based on the following specification:
|
||||
http://www.usb.org/developers/devclass_docs/DFU_1.1.pdf
|
||||
|
||||
Supported functionality:
|
||||
|
||||
- Download of new firmware to device
|
||||
- Upload of existing firmware from device
|
||||
- Revert device back to factory image
|
||||
- Automatic reboot of device on firmware upgrade
|
||||
|
||||
You must use XMOS Development Tools version 10.4.1 (or later).
|
||||
|
||||
The DFU device on Windows requires the Theyscon USB Audio 2.0 Windows driver
|
||||
version 1.13.3 or later.
|
||||
@@ -1,70 +0,0 @@
|
||||
Using the DFU loader - Windows (via the Thesycon driver)
|
||||
========================================================
|
||||
|
||||
Thesycon provide both GUI and CLI DFU tools, TUSBAudioDfu.exe and dfucons.exe
|
||||
respectively. The use of the GUI tool is not covered by this document.
|
||||
|
||||
The correct installation of the Thesycon driver and DFU tools exceeds
|
||||
the scope of this document.
|
||||
|
||||
Set up the image loader
|
||||
-----------------------
|
||||
|
||||
Run the DFU console tool (``dfucons.exe``) from the Thesycon install folder,
|
||||
in a Command Prompt by navigating to:
|
||||
|
||||
``C:\Program Files\Thesycon\TUSBAudio_Driver\``
|
||||
|
||||
To check the device has been detected, run the following command in the DFU
|
||||
console:
|
||||
|
||||
``dfucons info``
|
||||
|
||||
The console shows the DFU devices that have been detected.
|
||||
|
||||
Download new firmware
|
||||
---------------------
|
||||
|
||||
To program the new firmware run the command:
|
||||
|
||||
``dfucons download new_firmware.bin``
|
||||
|
||||
Note that once this is done the device restarts. The original factory default
|
||||
application is still present but the device is now running the upgraded
|
||||
application firmware.
|
||||
|
||||
You can check the device has been updated by running the command:
|
||||
|
||||
``dfucons info``
|
||||
|
||||
This will display the device revision.
|
||||
|
||||
Uploading existing firmware from the device
|
||||
-------------------------------------------
|
||||
|
||||
You can retrieve a firmware image from the device, providing an upgrade image is
|
||||
present.
|
||||
Run the command:
|
||||
|
||||
``dfucons upload currentfirmware.bin``
|
||||
|
||||
The file ``currentfirmware.bin`` contains the latest upgrade image. This file is
|
||||
an exact copy of the data from the flash and can be downloaded to the device
|
||||
again to test.
|
||||
|
||||
Reverting firmware to factory image
|
||||
-----------------------------------
|
||||
|
||||
To revert the device back to its factory (i.e XFLASH) installed state from the
|
||||
new firmware, run the command:
|
||||
|
||||
``dfucons revertfactory``
|
||||
|
||||
The device will now be running, and only contain the factory firmware, which can
|
||||
be seen by checking the device version once more.
|
||||
|
||||
Related documents
|
||||
-----------------
|
||||
|
||||
For further details on the use of the Thesycon DFU tools please see
|
||||
`Thesycon USB Audio 2.0 Driver for Windows User Manual <https://www.xmos.com/published/usb-audio-class-20-evaluation-driver-windows>`_.
|
||||
@@ -1,49 +0,0 @@
|
||||
Using the DFU loader - macOS (via the XMOS DFU loader)
|
||||
======================================================
|
||||
|
||||
The XMOS DFU loader is provided as source as part of the XMOS USB Audio software
|
||||
framework, see :ref:`usb_audiosec_building_xmos_dfu`.
|
||||
|
||||
Set up the image loader
|
||||
-----------------------
|
||||
|
||||
#. Open a terminal
|
||||
#. Change directory to where the loader has been built
|
||||
#. Run the command:
|
||||
|
||||
``source setup.sh``
|
||||
|
||||
Download new firmware
|
||||
---------------------
|
||||
|
||||
To program the new firmware run the command:
|
||||
|
||||
``./xmosdfu --download new_firmware.bin``
|
||||
|
||||
Note that once this is done the device restarts. The original factory default
|
||||
application is still present but the device is now running the upgraded
|
||||
application firmware.
|
||||
|
||||
Uploading existing firmware from the device
|
||||
-------------------------------------------
|
||||
|
||||
You can retrieve a firmware image from the device, providing an upgrade image is
|
||||
present.
|
||||
|
||||
Run the command:
|
||||
|
||||
``./xmosdfu --upload currentfirmware.bin``
|
||||
|
||||
The file ``currentfirmware.bin`` contains the latest upgrade image. This file is
|
||||
an exact copy of the data from the flash and can be downloaded to the device
|
||||
again to test.
|
||||
|
||||
Reverting firmware to factory image
|
||||
-----------------------------------
|
||||
|
||||
To revert the device back to its factory (i.e XFLASH) installed state from the
|
||||
new firmware, run the command:
|
||||
|
||||
``./xmosdfu --revertfactory``
|
||||
|
||||
The device will now be running, and only contain the factory firmware.
|
||||
@@ -1,22 +0,0 @@
|
||||
# This file describes how this module will affect the application
|
||||
# using it. The file is included in the Makefile of the main application.
|
||||
#
|
||||
# The module contributes to the build of the application by extending
|
||||
# the following variables:
|
||||
#
|
||||
# SOURCE_DIRS - directories with source files to be included in the build
|
||||
# INCLUDE_DIRS - directories to be added to the include path during the build
|
||||
# LIB_DIRS - directories containing libraries to be linked into the build
|
||||
#
|
||||
# Note that all the source files in each directory in SOURCE_DIRS
|
||||
# will be compiled (you do not need to name the files individually).
|
||||
#
|
||||
|
||||
MODULE_DIRS = src
|
||||
|
||||
SOURCE_DIRS += $(MODULE_DIRS)
|
||||
INCLUDE_DIRS += $(MODULE_DIRS)
|
||||
MODULE_XCC_FLAGS = -Os -mno-dual-issue $(XCC_FLAGS)
|
||||
MODULE_C_FLAGS = -Os -mno-dual-issue $(XCC_FLAGS)
|
||||
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
Code providing firmware upgrade over USB.
|
||||
@@ -1,4 +0,0 @@
|
||||
def use_module(bld):
|
||||
sources = bld.path.ant_glob(['src/*.xc', 'src/*.c'])
|
||||
bld.env.XCC_FLAGS = ['-Os', '-mno-dual-issue'] + bld.env.XCC_FLAGS
|
||||
bld.module(source=sources, includes=['src'])
|
||||
@@ -1,9 +0,0 @@
|
||||
Queuing Module For USB Audio Framework
|
||||
======================================
|
||||
|
||||
:scope: General Use
|
||||
:description: queue
|
||||
:keywords: UAC2
|
||||
:boards:
|
||||
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
# You can set flags specifically for your module by using the MODULE_XCC_FLAGS
|
||||
# variable. So the following
|
||||
#
|
||||
# MODULE_XCC_FLAGS = $(XCC_FLAGS) -O3
|
||||
#
|
||||
# specifies that everything in the modules should have the application
|
||||
# build flags with -O3 appended (so the files will build at
|
||||
# optimization level -O3).
|
||||
#
|
||||
# You can also set MODULE_XCC_C_FLAGS, MODULE_XCC_XC_FLAGS etc..
|
||||
|
||||
MODULE_XCC_XC_FLAGS = $(XCC_XC_FLAGS)
|
||||
|
||||
DEPENDENT_MODULES =
|
||||
@@ -1 +0,0 @@
|
||||
One line module description.
|
||||
@@ -1,2 +0,0 @@
|
||||
def use_module(bld):
|
||||
bld.module(source='src/queue.xc')
|
||||
@@ -16,7 +16,7 @@
|
||||
#include "audiostream.h"
|
||||
#include "hostactive.h"
|
||||
#include "vendorrequests.h"
|
||||
#include "dfu_types.h"
|
||||
//#include "dfu_types.h"
|
||||
#include "xc_ptr.h"
|
||||
#include "audiorequests.h"
|
||||
#ifdef HID_CONTROLS
|
||||
@@ -52,7 +52,7 @@
|
||||
#warning DFU_PID not defined, Using PID_AUDIO_2. This is probably fine!
|
||||
#endif
|
||||
|
||||
#ifdef DFU
|
||||
#if (XUA_DFU == 1)
|
||||
#include "dfu.h"
|
||||
#define DFU_IF_NUM INPUT_INTERFACES + OUTPUT_INTERFACES + MIDI_INTERFACES + 1
|
||||
extern void device_reboot(chanend);
|
||||
@@ -199,7 +199,7 @@ const unsigned g_chanCount_In_HS[INPUT_FORMAT_COUNT] = {HS_STREAM_FORMAT_I
|
||||
};
|
||||
|
||||
/* Endpoint 0 function. Handles all requests to the device */
|
||||
void Endpoint0(chanend c_ep0_out, chanend c_ep0_in, chanend c_audioControl,
|
||||
void XUA_Endpoint0(chanend c_ep0_out, chanend c_ep0_in, chanend c_audioControl,
|
||||
chanend c_mix_ctl, chanend c_clk_ctl, chanend c_EANativeTransport_ctrl, CLIENT_INTERFACE(i_dfu, dfuInterface) VENDOR_REQUESTS_PARAMS_DEC_)
|
||||
{
|
||||
USB_SetupPacket_t sp;
|
||||
@@ -281,7 +281,7 @@ void Endpoint0(chanend c_ep0_out, chanend c_ep0_in, chanend c_audioControl,
|
||||
VendorAudioRequestsInit(c_audioControl, c_mix_ctl, c_clk_ctl);
|
||||
#endif
|
||||
|
||||
#ifdef DFU
|
||||
#if (XUA_DFU == 1)
|
||||
/* Check if device has started in DFU mode */
|
||||
if (DFUReportResetState(null))
|
||||
{
|
||||
@@ -547,7 +547,7 @@ void Endpoint0(chanend c_ep0_out, chanend c_ep0_in, chanend c_audioControl,
|
||||
//unsigned request = (sp.bmRequestType.Recipient ) | (sp.bmRequestType.Type << 5);
|
||||
|
||||
/* TODO Check on return value retval = */
|
||||
#ifdef DFU
|
||||
#if (XUA_DFU == 1)
|
||||
unsigned DFU_IF = INTERFACE_NUMBER_DFU;
|
||||
|
||||
/* DFU interface number changes based on which mode we are currently running in */
|
||||
@@ -587,7 +587,7 @@ void Endpoint0(chanend c_ep0_out, chanend c_ep0_in, chanend c_audioControl,
|
||||
* - Audio endpoint request (Audio 1.0 Sampling freq requests are sent to the endpoint)
|
||||
*/
|
||||
if(((interfaceNum == 0) || (interfaceNum == 1) || (interfaceNum == 2))
|
||||
#ifdef DFU
|
||||
#if (XUA_DFU == 1)
|
||||
&& !DFU_mode_active
|
||||
#endif
|
||||
)
|
||||
@@ -750,8 +750,8 @@ void Endpoint0(chanend c_ep0_out, chanend c_ep0_in, chanend c_audioControl,
|
||||
cfgDesc_Null, sizeof(cfgDesc_Null),
|
||||
(char**)&g_strTable, sizeof(g_strTable)/sizeof(char *), &sp, g_curUsbSpeed);
|
||||
#endif
|
||||
#ifdef DFU
|
||||
}
|
||||
#if (XUA_DFU == 1)
|
||||
else
|
||||
{
|
||||
/* Running in DFU mode - always return same descs for DFU whether HS or FS */
|
||||
@@ -776,7 +776,7 @@ void Endpoint0(chanend c_ep0_out, chanend c_ep0_in, chanend c_audioControl,
|
||||
g_curStreamAlt_Out = 0;
|
||||
g_curStreamAlt_In = 0;
|
||||
|
||||
#ifdef DFU
|
||||
#if (XUA_DFU == 1)
|
||||
if (DFUReportResetState(null))
|
||||
{
|
||||
if (!DFU_mode_active)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#include "devicedefines.h"
|
||||
#ifdef DFU
|
||||
#if (XUD_DFU == 1)
|
||||
#include "uac_hwresources.h"
|
||||
#include <xs1.h>
|
||||
#include <xclib.h>
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
|
||||
#include "devicedefines.h" /* Device specific defines */
|
||||
#ifndef EXCLUDE_USB_AUDIO_MAIN
|
||||
|
||||
/**
|
||||
* @file main.xc
|
||||
* @brief Top level for XMOS USB 2.0 Audio 2.0 Reference Designs.
|
||||
@@ -14,10 +18,9 @@
|
||||
|
||||
#include "xud.h" /* XMOS USB Device Layer defines and functions */
|
||||
#ifndef NO_USB
|
||||
#include "endpoint0.h"
|
||||
#include "xua_endpoint0.h"
|
||||
#endif
|
||||
|
||||
#include "devicedefines.h" /* Device specific defines */
|
||||
#include "uac_hwresources.h"
|
||||
#include "usb_buffer.h"
|
||||
#include "decouple.h"
|
||||
@@ -392,7 +395,7 @@ VENDOR_REQUESTS_PARAMS_DEC_
|
||||
/* Endpoint 0 Core */
|
||||
{
|
||||
thread_speed();
|
||||
Endpoint0( c_xud_out[0], c_xud_in[0], c_aud_ctl, c_mix_ctl, c_clk_ctl, c_EANativeTransport_ctrl, dfuInterface VENDOR_REQUESTS_PARAMS_);
|
||||
XUA_Endpoint0( c_xud_out[0], c_xud_in[0], c_aud_ctl, c_mix_ctl, c_clk_ctl, c_EANativeTransport_ctrl, dfuInterface VENDOR_REQUESTS_PARAMS_);
|
||||
}
|
||||
|
||||
/* Decoupling core */
|
||||
@@ -496,7 +499,6 @@ void usb_audio_io(chanend ?c_aud_in, chanend ?c_adc,
|
||||
#define USER_MAIN_CORES
|
||||
#endif
|
||||
|
||||
#ifndef EXCLUDE_USB_AUDIO_MAIN
|
||||
|
||||
/* Main for USB Audio Applications */
|
||||
int main()
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
def use_module(bld):
|
||||
# Set file specific flags
|
||||
for item in ('endpoint0.c', 'dbcalc.xc', 'audiorequests.xc',
|
||||
'flashlib_user.c', 'audioports.c', 'audioports.xc'):
|
||||
bld.env['XCC_FLAGS_{}'.format(item)] = ['-Os', '-mno-dual-issue'
|
||||
] + bld.env.XCC_FLAGS
|
||||
|
||||
sources = bld.path.ant_glob(['**/*.xc', '**/*.c', '**/*.S'])
|
||||
tgen = bld.module(source=sources, includes=['.', 'audio_io'])
|
||||
@@ -1,3 +1,5 @@
|
||||
#include "devicedefines.h"
|
||||
#if (XUA_DFU == 1)
|
||||
#include <xs1.h>
|
||||
#include <platform.h>
|
||||
#include "devicedefines.h"
|
||||
@@ -579,3 +581,5 @@ int DFUDeviceRequests(XUD_ep ep0_out, XUD_ep &?ep0_in, USB_SetupPacket_t &sp, ch
|
||||
return returnVal;
|
||||
}
|
||||
#endif /* NO_USB */
|
||||
|
||||
#endif
|
||||
@@ -1,3 +1,5 @@
|
||||
#include "devicedefines.h"
|
||||
#if (XUA_DFU == 1)
|
||||
#include <xs1.h>
|
||||
#include <flash.h>
|
||||
#include <flashlib.h>
|
||||
@@ -245,4 +247,5 @@ int flash_cmd_erase_all(void)
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
module README.
|
||||
@@ -1,9 +0,0 @@
|
||||
MIDI Module for USB Audio Framework
|
||||
===================================
|
||||
|
||||
:scope: General Use
|
||||
:description: MIDI
|
||||
:keywords: MIDI
|
||||
:boards:
|
||||
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
# You can set flags specifically for your module by using the MODULE_XCC_FLAGS
|
||||
# variable. So the following
|
||||
#
|
||||
# MODULE_XCC_FLAGS = $(XCC_FLAGS) -O3
|
||||
#
|
||||
# specifies that everything in the modules should have the application
|
||||
# build flags with -O3 appended (so the files will build at
|
||||
# optimization level -O3).
|
||||
#
|
||||
# You can also set MODULE_XCC_C_FLAGS, MODULE_XCC_XC_FLAGS etc..
|
||||
|
||||
DEPENDENT_MODULES = module_queue
|
||||
@@ -1 +0,0 @@
|
||||
One line module description.
|
||||
@@ -1,3 +0,0 @@
|
||||
def use_module(bld):
|
||||
source = bld.path.ant_glob('src/*.xc')
|
||||
bld.module(source=source, depends_on='module_queue')
|
||||
Reference in New Issue
Block a user