PK BDuJ nja a lib_xtcp/CHANGELOG.rstTCP/IP library change log
=========================
6.0.0
-----
* CHANGE: Unified the branches of uIP and lwIP as the backend of the XTCP
stack. The default is uIP. To change the stack, define XTCP_STACK in your
makefile to be either UIP or LWIP. Then, instead of calling xtcp(...), call
either xtcp_uip(...) or xtcp_lwip(...) respectively.
* CHANGE: The interface between the client and server is now event-driven
rather than polling.
* CHANGE: Channels have been replaced by interfaces as communication medium
between client and server.
* REMOVED: The following xtcp_event_types: XTCP_PUSH_DATA, XTCP_REQUEST_DATA,
XTCP_POLL, XTCP_ALREADY_HANDLED
* CHANGE: The fields of packet_length and client_num have been added to the
xtcp_connection_t structure.
* REMOVED: xtcp_connection_t no longer has a xtcp_connection_type_t field.
* REMOVED: The ability to pause a connection
* REMOVED: The ability to partially acknowledge a packet
* REMOVED: Support for IPv6
* REMOVED: the ability to send with an index. This functionality is easily
replicated with a call to send() with the pointer of the array index
location, i.e. &(data[index]).
* REMOVED: Support for XTCP_EXCLUDE_* macros which reduced functionality in
order to save code size
* FIXED: Problem where ethernet packets smaller than 64 bytes would be
incorrectly padded with uIP.
* Changes to dependencies:
- lib_crypto: Removed dependency
5.1.0
-----
* ADDED: Support for using lib_wifi to provide the physical transport
5.0.0
-----
* ADDED: Port of LwIP TCP/IP stack
* Changes to dependencies:
- lib_crypto: Added dependency 1.0.0
4.0.3
-----
* ADDED: Support to enable link status notifications
4.0.2
-----
* CHANGE: uIP timer.h renamed to uip_timer.h to avoid conflict with xcore
timer.h
* CHANGE: Update to source code license and copyright
4.0.1
-----
* CHANGE: MAC address parameter to xtcp() is now qualified as const to allow
parallel usage
* RESOLVED: Fixed issue with link up/down events being ignored when SMI is not
polled within XTCP
4.0.0
-----
* CHANGE: Moved over to new file structure
* CHANGE: Updated to use new lib_ethernet
* Changes to dependencies:
- lib_ethernet: Added dependency 3.0.0
- lib_gpio: Added dependency 1.0.0
- lib_locks: Added dependency 2.0.0
- lib_logging: Added dependency 2.0.0
- lib_otpinfo: Added dependency 2.0.0
- lib_xassert: Added dependency 2.0.0
Legacy release history
----------------------
3.2.1
-----
* Changes to dependencies:
- sc_ethernet: 2.2.7rc1 -> 2.3.1rc0
+ Fix invalid inter-frame gaps.
+ Adds AVB-DC support to sc_ethernet
3.2.0
-----
* Added IPv6 support
3.1.5
-----
* Fixed channel protocol bug that caused crash when xCONNECT is
heavily loaded
* Various documentation updates
* Fixes to avoid warning in xTIMEcomposer studio version 13.0.0
or later
* Changes to dependencies:
- sc_ethernet: 2.2.5rc2 -> 2.2.7rc1
+ Fix buffering bug on full implementation that caused crash under
+ Various documentation updates
3.1.4
-----
* Updated ethernet dependency to version 2.2.5
3.1.3
-----
* Updated ethernet dependency to version 2.2.4
* Fixed corner case errors/improved robustness in DHCP protocol handling
3.1.2
-----
* Fixed auto-ip bug for 2-core xtcp server
3.1.1
-----
* Minor code demo app fixes (port structures should be declared on
specific tiles)
3.1.0
-----
* Compatible with 2.2 module_ethernet
* Updated to new intializer api and integrated ethernet server
3.0.1
-----
* Updated to use latest sc_ethernet package
3.0.0
-----
* Fixed bugs in DHCP and multicast UDP
* Updated packaging, makefiles and documentation
* Updated to use latest sc_ethernet package
2.0.1
-----
* Further memory improvements
* Additional conditional compilation
* Fix to zeroconf with netbios option enabled
2.0.0
-----
* Memory improvements
* Fix error whereby UDP packets with broadcast destination were not received
* An initial implementation of a TFTP server
1.3.1
-----
* Initial implementation
PK BDuJa
F* F* lib_xtcp/LICENSE.txtSoftware Release License Agreement
Copyright (c) 2011-2017, XMOS, All rights reserved.
BY ACCESSING, USING, INSTALLING OR DOWNLOADING THE XMOS SOFTWARE, YOU AGREE TO BE BOUND BY THE FOLLOWING TERMS. IF YOU DO NOT AGREE TO THESE, DO NOT ATTEMPT TO DOWNLOAD, ACCESS OR USE THE XMOS Software.
Parties:
(1) XMOS Limited, incorporated and registered in England and Wales with company number 5494985 whose registered office is 107 Cheapside, London, EC2V 6DN (XMOS).
(2) An individual or legal entity exercising permissions granted by this License (Customer).
If you are entering into this Agreement on behalf of another legal entity such as a company, partnership, university, college etc. (for example, as an employee, student or consultant), you warrant that you have authority to bind that entity.
1. Definitions
"License" means this Software License and any schedules or annexes to it.
"License Fee" means the fee for the XMOS Software as detailed in any schedules or annexes to this Software License
"Licensee Modifications" means all developments and modifications of the XMOS Software developed independently by the Customer.
"XMOS Modifications" means all developments and modifications of the XMOS Software developed or co-developed by XMOS.
"XMOS Hardware" means any XMOS hardware devices supplied by XMOS from time to time and/or the particular XMOS devices detailed in any schedules or annexes to this Software License.
"XMOS Software" comprises the XMOS owned circuit designs, schematics, source code, object code, reference designs, (including related programmer comments and documentation, if any), error corrections, improvements, modifications (including XMOS Modifications) and updates.
The headings in this License do not affect its interpretation. Save where the context otherwise requires, references to clauses and schedules are to clauses and schedules of this License.
Unless the context otherwise requires:
- references to XMOS and the Customer include their permitted successors and assigns;
- references to statutory provisions include those statutory provisions as amended or re-enacted; and
- references to any gender include all genders.
Words in the singular include the plural and in the plural include the singular.
2. License
XMOS grants the Customer a non-exclusive license to use, develop, modify and distribute the XMOS Software with, or for the purpose of being used with, XMOS Hardware.
Open Source Software (OSS) must be used and dealt with in accordance with any license terms under which OSS is distributed.
3. Consideration
In consideration of the mutual obligations contained in this License, the parties agree to its terms.
4. Term
Subject to clause 12 below, this License shall be perpetual.
5. Restrictions on Use
The Customer will adhere to all applicable import and export laws and regulations of the country in which it resides and of the United States and United Kingdom, without limitation. The Customer agrees that it is its responsibility to obtain copies of and to familiarise itself fully with these laws and regulations to avoid violation.
6. Modifications
The Customer will own all intellectual property rights in the Licensee Modifications but will undertake to provide XMOS with any fixes made to correct any bugs found in the XMOS Software on a non-exclusive, perpetual and royalty free license basis.
XMOS will own all intellectual property rights in the XMOS Modifications.
The Customer may only use the Licensee Modifications and XMOS Modifications on, or in relation to, XMOS Hardware.
7. Support
Support of the XMOS Software may be provided by XMOS pursuant to a separate support agreement.
8. Warranty and Disclaimer
The XMOS Software is provided "AS IS" without a warranty of any kind. XMOS and its licensors' entire liability and Customer's exclusive remedy under this warranty to be determined in XMOS's sole and absolute discretion, will be either (a) the corrections of defects in media or replacement of the media, or (b) the refund of the license fee paid (if any).
Whilst XMOS gives the Customer the ability to load their own software and applications onto XMOS devices, the security of such software and applications when on the XMOS devices is the Customer's own responsibility and any breach of security shall not be deemed a defect or failure of the hardware. XMOS shall have no liability whatsoever in relation to any costs, damages or other losses Customer may incur as a result of any breaches of security in relation to your software or applications.
XMOS AND ITS LICENSORS DISCLAIM ALL OTHER WARRANTIES, EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY/ SATISFACTORY QUALITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT EXCEPT TO THE EXTENT THAT THESE DISCLAIMERS ARE HELD TO BE LEGALLY INVALID UNDER APPLICABLE LAW.
9. High Risk Activities
The XMOS Software is not designed or intended for use in conjunction with on-line control equipment in hazardous environments requiring fail-safe performance, including without limitation the operation of nuclear facilities, aircraft navigation or communication systems, air traffic control, life support machines, or weapons systems (collectively "High Risk Activities") in which the failure of the XMOS Software could lead directly to death, personal injury, or severe physical or environmental damage. XMOS and its licensors specifically disclaim any express or implied warranties relating to use of the XMOS Software in connection with High Risk Activities.
10. Liability
TO THE EXTENT NOT PROHIBITED BY APPLICABLE LAW, NEITHER XMOS NOR ITS LICENSORS SHALL BE LIABLE FOR ANY LOST REVENUE, BUSINESS, PROFIT, CONTRACTS OR DATA, ADMINISTRATIVE OR OVERHEAD EXPENSES, OR FOR SPECIAL, INDIRECT, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES HOWEVER CAUSED AND REGARDLESS OF THEORY OF LIABILITY ARISING OUT OF THIS LICENSE, EVEN IF XMOS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. In no event shall XMOS's liability to the Customer whether in contract, tort (including negligence), or otherwise exceed the License Fee.
Customer agrees to indemnify, hold harmless, and defend XMOS and its licensors from and against any claims or lawsuits, including attorneys' fees and any other liabilities, demands, proceedings, damages, losses, costs, expenses fines and charges which are made or brought against or incurred by XMOS as a result of your use or distribution of the Licensee Modifications or your use or distribution of XMOS Software, or any development of it, other than in accordance with the terms of this License.
11. Ownership
The copyrights and all other intellectual and industrial property rights for the protection of information with respect to the XMOS Software (including the methods and techniques on which they are based) are retained by XMOS and/or its licensors. Nothing in this Agreement serves to transfer such rights. Customer may not sell, mortgage, underlet, sublease, sublicense, lend or transfer possession of the XMOS Software in any way whatsoever to any third party who is not bound by this Agreement.
12. Termination
Either party may terminate this License at any time on written notice to the other if the other:
- is in material or persistent breach of any of the terms of this License and either that breach is incapable of remedy, or the other party fails to remedy that breach within 30 days after receiving written notice requiring it to remedy that breach; or
- is unable to pay its debts (within the meaning of section 123 of the Insolvency Act 1986), or becomes insolvent, or is subject to an order or a resolution for its liquidation, administration, winding-up or dissolution (otherwise than for the purposes of a solvent amalgamation or reconstruction), or has an administrative or other receiver, manager, trustee, liquidator, administrator or similar officer appointed over all or any substantial part of its assets, or enters into or proposes any composition or arrangement with its creditors generally, or is subject to any analogous event or proceeding in any applicable jurisdiction.
Termination by either party in accordance with the rights contained in clause 12 shall be without prejudice to any other rights or remedies of that party accrued prior to termination.
On termination for any reason:
- all rights granted to the Customer under this License shall cease;
- the Customer shall cease all activities authorised by this License;
- the Customer shall immediately pay any sums due to XMOS under this License; and
- the Customer shall immediately destroy or return to the XMOS (at the XMOS's option) all copies of the XMOS Software then in its possession, custody or control and, in the case of destruction, certify to XMOS that it has done so.
Clauses 5, 8, 9, 10 and 11 shall survive any effective termination of this Agreement.
13. Third party rights
No term of this License is intended to confer a benefit on, or to be enforceable by, any person who is not a party to this license.
14. Confidentiality and publicity
Each party shall, during the term of this License and thereafter, keep confidential all, and shall not use for its own purposes nor without the prior written consent of the other disclose to any third party any, information of a confidential nature (including, without limitation, trade secrets and information of commercial value) which may become known to such party from the other party and which relates to the other party, unless such information is public knowledge or already known to such party at the time of disclosure, or subsequently becomes public knowledge other than by breach of this license, or subsequently comes lawfully into the possession of such party from a third party.
The terms of this license are confidential and may not be disclosed by the Customer without the prior written consent of XMOS.
The provisions of clause 14 shall remain in full force and effect notwithstanding termination of this license for any reason.
15. Entire agreement
This License and the documents annexed as appendices to this License or otherwise referred to herein contain the whole agreement between the parties relating to the subject matter hereof and supersede all prior agreements, arrangements and understandings between the parties relating to that subject matter.
16. Assignment
The Customer shall not assign this License or any of the rights granted under it without XMOS's prior written consent.
17. Governing law and jurisdiction
This License shall be governed by and construed in accordance with English law and each party hereby submits to the non-exclusive jurisdiction of the English courts.
This License has been entered into on the date stated at the beginning of it.
Schedule
XMOS TCP/IP Library software
PK BDuJO﨔 lib_xtcp/README.rstTCP/IP Library
==============
Overview
--------
A library providing two alternative TCP/UDP/IP protocol stacks for XMOS devices.
This library connects to the XMOS Ethernet library to provide layer-3 traffic
over Ethernet via MII or RGMII.
Features
........
* TCP and UDP connection handling
* DHCP, IP4LL, ICMP, IGMP support
* Low level, event based interface for efficient memory usage
* Supports IPv4 only, not IPv6
Stacks
......
This library provides two different TCP/IP stack implementations ported to the
xCORE architecture.
uIP stack
+++++++++
The first stack ported is the uIP (micro IP) stack. The uIP stack has been
designed to have a minimal resource footprint. As a result, it has limited
performance and does not provide support for TCP windowing.
lwIP stack
++++++++++
The second stack ported is the lwIP (lightweight IP) stack. The lwIP stack
requires more resources than uIP, but is designed to provide
better throughput and also has support for TCP windowing.
Typical Resource Usage
......................
.. resusage::
* - configuration: UIP
- globals: xtcp_ipconfig_t ipconfig = {
{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 }
};
char mac_addr[6] = {0};
- locals: interface mii_if i_mii; xtcp_if i_xtcp[1];
- fn: xtcp_uip(i_xtcp, 1, i_mii,
null, null, null,
null, 0, mac_addr, null, ipconfig);
- pins: 0
- ports: 0
* - configuration: LWIP
- globals: xtcp_ipconfig_t ipconfig = {
{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 }
};
char mac_addr[6] = {0};
- locals: interface mii_if i_mii; xtcp_if i_xtcp[1];
- fn: xtcp_lwip(i_xtcp, 1, i_mii,
null, null, null,
null, 0, mac_addr, null, ipconfig);
- pins: 0
- ports: 0
- target: XCORE-200-EXPLORER
Software version and dependencies
.................................
.. libdeps::
Related application notes
.........................
The following application notes use this library:
* AN00121 - Using the XMOS TCP/IP library
PK BDuJ߬:# # lib_xtcp/lib_xtcp/.cproject
PK BDuJ lib_xtcp/lib_xtcp/.project
lib_xtcp
com.xmos.cdt.core.ModulePathBuilder
com.xmos.cdt.core.LegacyProjectCheckerBuilder
org.eclipse.cdt.managedbuilder.core.genmakebuilder
clean,full,incremental,
com.xmos.cdt.core.ProjectInfoSyncBuilder
org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder
full,incremental,
org.eclipse.cdt.core.cnature
org.eclipse.cdt.managedbuilder.core.managedBuildNature
org.eclipse.cdt.managedbuilder.core.ScannerConfigNature
com.xmos.cdt.core.XdeProjectNature
PK BDuJ~!6F* F* lib_xtcp/lib_xtcp/LICENSE.txtSoftware Release License Agreement
Copyright (c) 2014-2017, XMOS, All rights reserved.
BY ACCESSING, USING, INSTALLING OR DOWNLOADING THE XMOS SOFTWARE, YOU AGREE TO BE BOUND BY THE FOLLOWING TERMS. IF YOU DO NOT AGREE TO THESE, DO NOT ATTEMPT TO DOWNLOAD, ACCESS OR USE THE XMOS Software.
Parties:
(1) XMOS Limited, incorporated and registered in England and Wales with company number 5494985 whose registered office is 107 Cheapside, London, EC2V 6DN (XMOS).
(2) An individual or legal entity exercising permissions granted by this License (Customer).
If you are entering into this Agreement on behalf of another legal entity such as a company, partnership, university, college etc. (for example, as an employee, student or consultant), you warrant that you have authority to bind that entity.
1. Definitions
"License" means this Software License and any schedules or annexes to it.
"License Fee" means the fee for the XMOS Software as detailed in any schedules or annexes to this Software License
"Licensee Modifications" means all developments and modifications of the XMOS Software developed independently by the Customer.
"XMOS Modifications" means all developments and modifications of the XMOS Software developed or co-developed by XMOS.
"XMOS Hardware" means any XMOS hardware devices supplied by XMOS from time to time and/or the particular XMOS devices detailed in any schedules or annexes to this Software License.
"XMOS Software" comprises the XMOS owned circuit designs, schematics, source code, object code, reference designs, (including related programmer comments and documentation, if any), error corrections, improvements, modifications (including XMOS Modifications) and updates.
The headings in this License do not affect its interpretation. Save where the context otherwise requires, references to clauses and schedules are to clauses and schedules of this License.
Unless the context otherwise requires:
- references to XMOS and the Customer include their permitted successors and assigns;
- references to statutory provisions include those statutory provisions as amended or re-enacted; and
- references to any gender include all genders.
Words in the singular include the plural and in the plural include the singular.
2. License
XMOS grants the Customer a non-exclusive license to use, develop, modify and distribute the XMOS Software with, or for the purpose of being used with, XMOS Hardware.
Open Source Software (OSS) must be used and dealt with in accordance with any license terms under which OSS is distributed.
3. Consideration
In consideration of the mutual obligations contained in this License, the parties agree to its terms.
4. Term
Subject to clause 12 below, this License shall be perpetual.
5. Restrictions on Use
The Customer will adhere to all applicable import and export laws and regulations of the country in which it resides and of the United States and United Kingdom, without limitation. The Customer agrees that it is its responsibility to obtain copies of and to familiarise itself fully with these laws and regulations to avoid violation.
6. Modifications
The Customer will own all intellectual property rights in the Licensee Modifications but will undertake to provide XMOS with any fixes made to correct any bugs found in the XMOS Software on a non-exclusive, perpetual and royalty free license basis.
XMOS will own all intellectual property rights in the XMOS Modifications.
The Customer may only use the Licensee Modifications and XMOS Modifications on, or in relation to, XMOS Hardware.
7. Support
Support of the XMOS Software may be provided by XMOS pursuant to a separate support agreement.
8. Warranty and Disclaimer
The XMOS Software is provided "AS IS" without a warranty of any kind. XMOS and its licensors' entire liability and Customer's exclusive remedy under this warranty to be determined in XMOS's sole and absolute discretion, will be either (a) the corrections of defects in media or replacement of the media, or (b) the refund of the license fee paid (if any).
Whilst XMOS gives the Customer the ability to load their own software and applications onto XMOS devices, the security of such software and applications when on the XMOS devices is the Customer's own responsibility and any breach of security shall not be deemed a defect or failure of the hardware. XMOS shall have no liability whatsoever in relation to any costs, damages or other losses Customer may incur as a result of any breaches of security in relation to your software or applications.
XMOS AND ITS LICENSORS DISCLAIM ALL OTHER WARRANTIES, EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY/ SATISFACTORY QUALITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT EXCEPT TO THE EXTENT THAT THESE DISCLAIMERS ARE HELD TO BE LEGALLY INVALID UNDER APPLICABLE LAW.
9. High Risk Activities
The XMOS Software is not designed or intended for use in conjunction with on-line control equipment in hazardous environments requiring fail-safe performance, including without limitation the operation of nuclear facilities, aircraft navigation or communication systems, air traffic control, life support machines, or weapons systems (collectively "High Risk Activities") in which the failure of the XMOS Software could lead directly to death, personal injury, or severe physical or environmental damage. XMOS and its licensors specifically disclaim any express or implied warranties relating to use of the XMOS Software in connection with High Risk Activities.
10. Liability
TO THE EXTENT NOT PROHIBITED BY APPLICABLE LAW, NEITHER XMOS NOR ITS LICENSORS SHALL BE LIABLE FOR ANY LOST REVENUE, BUSINESS, PROFIT, CONTRACTS OR DATA, ADMINISTRATIVE OR OVERHEAD EXPENSES, OR FOR SPECIAL, INDIRECT, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES HOWEVER CAUSED AND REGARDLESS OF THEORY OF LIABILITY ARISING OUT OF THIS LICENSE, EVEN IF XMOS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. In no event shall XMOS's liability to the Customer whether in contract, tort (including negligence), or otherwise exceed the License Fee.
Customer agrees to indemnify, hold harmless, and defend XMOS and its licensors from and against any claims or lawsuits, including attorneys' fees and any other liabilities, demands, proceedings, damages, losses, costs, expenses fines and charges which are made or brought against or incurred by XMOS as a result of your use or distribution of the Licensee Modifications or your use or distribution of XMOS Software, or any development of it, other than in accordance with the terms of this License.
11. Ownership
The copyrights and all other intellectual and industrial property rights for the protection of information with respect to the XMOS Software (including the methods and techniques on which they are based) are retained by XMOS and/or its licensors. Nothing in this Agreement serves to transfer such rights. Customer may not sell, mortgage, underlet, sublease, sublicense, lend or transfer possession of the XMOS Software in any way whatsoever to any third party who is not bound by this Agreement.
12. Termination
Either party may terminate this License at any time on written notice to the other if the other:
- is in material or persistent breach of any of the terms of this License and either that breach is incapable of remedy, or the other party fails to remedy that breach within 30 days after receiving written notice requiring it to remedy that breach; or
- is unable to pay its debts (within the meaning of section 123 of the Insolvency Act 1986), or becomes insolvent, or is subject to an order or a resolution for its liquidation, administration, winding-up or dissolution (otherwise than for the purposes of a solvent amalgamation or reconstruction), or has an administrative or other receiver, manager, trustee, liquidator, administrator or similar officer appointed over all or any substantial part of its assets, or enters into or proposes any composition or arrangement with its creditors generally, or is subject to any analogous event or proceeding in any applicable jurisdiction.
Termination by either party in accordance with the rights contained in clause 12 shall be without prejudice to any other rights or remedies of that party accrued prior to termination.
On termination for any reason:
- all rights granted to the Customer under this License shall cease;
- the Customer shall cease all activities authorised by this License;
- the Customer shall immediately pay any sums due to XMOS under this License; and
- the Customer shall immediately destroy or return to the XMOS (at the XMOS's option) all copies of the XMOS Software then in its possession, custody or control and, in the case of destruction, certify to XMOS that it has done so.
Clauses 5, 8, 9, 10 and 11 shall survive any effective termination of this Agreement.
13. Third party rights
No term of this License is intended to confer a benefit on, or to be enforceable by, any person who is not a party to this license.
14. Confidentiality and publicity
Each party shall, during the term of this License and thereafter, keep confidential all, and shall not use for its own purposes nor without the prior written consent of the other disclose to any third party any, information of a confidential nature (including, without limitation, trade secrets and information of commercial value) which may become known to such party from the other party and which relates to the other party, unless such information is public knowledge or already known to such party at the time of disclosure, or subsequently becomes public knowledge other than by breach of this license, or subsequently comes lawfully into the possession of such party from a third party.
The terms of this license are confidential and may not be disclosed by the Customer without the prior written consent of XMOS.
The provisions of clause 14 shall remain in full force and effect notwithstanding termination of this license for any reason.
15. Entire agreement
This License and the documents annexed as appendices to this License or otherwise referred to herein contain the whole agreement between the parties relating to the subject matter hereof and supersede all prior agreements, arrangements and understandings between the parties relating to that subject matter.
16. Assignment
The Customer shall not assign this License or any of the rights granted under it without XMOS's prior written consent.
17. Governing law and jurisdiction
This License shall be governed by and construed in accordance with English law and each party hereby submits to the non-exclusive jurisdiction of the English courts.
This License has been entered into on the date stated at the beginning of it.
Schedule
XMOS TCP/IP Library software
PK BDuJ9)m m # lib_xtcp/lib_xtcp/module_build_infoVERSION = 6.0.0
DEPENDENT_MODULES = lib_ethernet(>=3.2.0) lib_otpinfo(>=2.0.0)
# Build flags
MODULE_XCC_FLAGS = $(XCC_FLAGS) -DLWIP=1 -DUIP=2 -g -Os
# Source directories
# Note: only includes IPv4 of lwIP
LWIP_SOURCE_DIRS = src src/xtcp_lwip/api src/xtcp_lwip/core/ src/xtcp_lwip/core/ipv4 src/xtcp_lwip/netif src/xtcp_lwip/xcore/src
UIP_SOURCE_DIRS = src src/xtcp_uip src/xtcp_uip/autoip src/xtcp_uip/dhcpc src/xtcp_uip/igmp
# Include directories
LWIP_INCLUDE_DIRS = src src/xtcp_lwip/include src/xtcp_lwip/xcore/include
# Exclude files
UIP_EXCLUDE_FILES += uip-fw.c uip-neighbor.c xtcp_lwip.xc xtcp_lwip_includes.h
LWIP_EXCLUDE_FILES += xtcp_uip.xc xtcp_uip_includes.h
# Leftover from previous incarnation.
XCC_FLAGS_xcoredev.xc = $(XCC_XC_FLAGS) -fsubword-select
# Provide the conditional defines needed for optional includes
OPTIONAL_HEADERS += xtcp_client_conf.h xtcp_conf.h
ifndef XTCP_STACK
# Have a different default depending on the target so that the documentation can
# do resource estimation for each stack by setting a target
ifeq ($(TARGET),XCORE-200-EXPLORER)
XTCP_STACK = LWIP
else
XTCP_STACK = UIP
endif
endif
ifeq ($(XTCP_STACK), UIP)
SOURCE_DIRS += $(UIP_SOURCE_DIRS)
INCLUDE_DIRS += $(UIP_SOURCE_DIRS) api
EXCLUDE_FILES += $(UIP_EXCLUDE_FILES)
# Defined in program
MODULE_XCC_FLAGS += -DXTCP_STACK=UIP
else ifeq ($(XTCP_STACK), LWIP)
SOURCE_DIRS += $(LWIP_SOURCE_DIRS)
INCLUDE_DIRS += $(LWIP_INCLUDE_DIRS) api
EXCLUDE_FILES += $(LWIP_EXCLUDE_FILES)
# Defined in program
MODULE_XCC_FLAGS += -DXTCP_STACK=LWIP
else
$(error XTCP_STACK must be either UIP or LWIP (or undefined, which defaults to UIP))
endifPK BDuJ
~ lib_xtcp/lib_xtcp/.makefileall:
@echo "** Module only - only builds as part of application **"
clean:
@echo "** Module only - only builds as part of application **"
PK BDuJۋ
w w lib_xtcp/lib_xtcp/.xproject
lib_xtcp
6.0.0
PK BDuJ|MXN XN lib_xtcp/lib_xtcp/api/xtcp.h// Copyright (c) 2011-2016, XMOS Ltd, All rights reserved
#ifndef __xtcp_h__
#define __xtcp_h__
#include
#include
#include
#include
#include
#ifdef __xtcp_conf_h_exists__
#include "xtcp_conf.h"
#endif
#ifdef __xtcp_client_conf_h_exists__
#include "xtcp_client_conf.h"
#endif
#ifndef XTCP_CLIENT_BUF_SIZE
#define XTCP_CLIENT_BUF_SIZE (1472)
#endif
#ifndef XTCP_MAX_RECEIVE_SIZE
#ifdef UIP_CONF_RECEIVE_WINDOW
#define XTCP_MAX_RECEIVE_SIZE (UIP_CONF_RECEIVE_WINDOW)
#else
#define XTCP_MAX_RECEIVE_SIZE (1472)
#endif
#endif
/** Used by the LWIP and uIP callback functions to
* correctly pass packets to the DHCP functions
*/
#define DHCPC_SERVER_PORT 67
#define DHCPC_CLIENT_PORT 68
/** Maximum number of listening ports for XTCP */
#ifndef NUM_TCP_LISTENERS
#define NUM_TCP_LISTENERS 20
#endif
#ifndef NUM_UDP_LISTENERS
#define NUM_UDP_LISTENERS 20
#endif
/** Maximum number of connected XTCP clients */
#ifndef MAX_XTCP_CLIENTS
#define MAX_XTCP_CLIENTS 5
#endif
/** Maximum number of events in a client queue */
#ifndef CLIENT_QUEUE_SIZE
#define CLIENT_QUEUE_SIZE 10
#endif
/** Value used by lwIP's RX buffer */
#define MAX_PACKET_BYTES 1518
/** As UDP connections are stateless, we need to include extra
* information in the UDP PCB to determine when a new connection
* has arrived. LWIP ONLY.
*/
#define CONNECTIONS_PER_UDP_PORT 10
typedef unsigned int xtcp_appstate_t;
/** XTCP IP address.
*
* This data type represents a single ipv4 address in the XTCP
* stack.
*/
typedef unsigned char xtcp_ipaddr_t[4];
/** IP configuration information structure.
*
* This structure describes IP configuration for an ip node.
*
**/
typedef struct xtcp_ipconfig_t {
xtcp_ipaddr_t ipaddr; /**< The IP Address of the node */
xtcp_ipaddr_t netmask; /**< The netmask of the node. The mask used
to determine which address are routed locally.*/
xtcp_ipaddr_t gateway; /**< The gateway of the node */
} xtcp_ipconfig_t;
/** XTCP protocol type.
*
* This determines what type a connection is: either UDP or TCP.
*
**/
typedef enum xtcp_protocol_t {
XTCP_PROTOCOL_TCP = 1, /**< Transmission Control Protocol */
XTCP_PROTOCOL_UDP /**< User Datagram Protocol */
} xtcp_protocol_t;
/** XTCP event type.
*
* The event type represents what event is occuring on a particular connection.
* It is instantiated as part of the xtcp_connection_t structure in the function
* get_packet().
*
**/
typedef enum xtcp_event_type_t {
XTCP_NEW_CONNECTION, /**< This event represents a new connection has been
made. In the case of a TCP server connections it
occurs when a remote host firsts makes contact
with the local host. For TCP client connections
it occurs when a stream is setup with the remote
host.
For UDP connections it occurs as soon as the
connection is created. **/
XTCP_RECV_DATA, /**< This event occurs when the connection has received
some data. The return_len in get_packet() will
indicate the length of the data. The data will be
present in the buffer passed to get_packet(). **/
XTCP_SENT_DATA, /**< This event occurs when the server has successfully
sent the previous piece of data that was given
to it via a call to send(). **/
XTCP_RESEND_DATA, /**< This event occurs when the server has failed to
send the previous piece of data that was given
to it via a call to send(). The server
is now requesting for the same data to be sent
again. **/
XTCP_TIMED_OUT, /**< This event occurs when the connection has
timed out with the remote host (TCP only).
This event represents the closing of a connection
and is the last event that will occur on
an active connection. */
XTCP_ABORTED, /**< This event occurs when the connection has
been aborted by the local or remote host
(TCP only).
This event represents the closing of a connection
and is the last event that will occur on
an active connection. */
XTCP_CLOSED, /**< This event occurs when the connection has
been closed by the local or remote host.
This event represents the closing of a connection
and is the last event that will occur on
an active connection. */
XTCP_IFUP, /**< This event occurs when the link goes up (with
valid new ip address). This event has no
associated connection. */
XTCP_IFDOWN, /**< This event occurs when the link goes down.
This event has no associated connection. */
XTCP_DNS_RESULT /**< This event occurs when the XTCP connection has a DNS
result for a request. **/
} xtcp_event_type_t;
/** This type represents a TCP or UDP connection.
*
* This is the main type containing connection information for the client
* to handle. Elements of this type are instantiated by the xtcp_event()
* function which informs the client about an event and the connection
* the event is on.
*
**/
typedef struct xtcp_connection_t {
int client_num; /**< The number of the client connected */
int id; /**< A unique identifier for the connection */
xtcp_protocol_t protocol; /**< The protocol of the connection (TCP/UDP) */
xtcp_event_type_t event; /**< The last reported event on this connection. */
xtcp_appstate_t appstate; /**< The application state associated with the
connection. This is set using the
set_appstate() function. */
xtcp_ipaddr_t remote_addr; /**< The remote ip address of the connection. */
unsigned int remote_port; /**< The remote port of the connection. */
unsigned int local_port; /**< The local port of the connection. */
unsigned int mss; /**< The maximum size in bytes that can be send using
xtcp_send() after a send event */
unsigned packet_length; /**< Length of packet recieved */
int stack_conn; /**< Pointer to the associated uIP/LWIP connection.
Only to be used by XTCP. */
} xtcp_connection_t;
#ifdef __XC__
typedef interface xtcp_if {
/** \brief Recieve information/data from the XTCP server.
*
* After the client is notified by packet_ready() it must call this function
* to receive the packet from the server.
*
* If the data buffer is not large enough then an exception will be raised.
*
* \param conn The connection structure to be passed in that will
* contain all the connection information.
* \param data An array where XTCP server can write data to. This data
* array must be large enough to receive the packets being
* sent to the client. In most cases it should be assumed
* that packets of ETHERNET_MAX_PACKET_SIZE can be received.
* \param n Size of the data array.
* \param length An integer where the server can indicate
* the length of the sent packet.
*/
[[clears_notification]] void get_packet(xtcp_connection_t &conn, char data[n], unsigned n, unsigned &length);
/** \brief Notifies the client that there is data/information
* ready for them.
*
* After this notification is raised a call to get_packet() is needed.
*/
[[notification]] slave void packet_ready();
/** \brief Listen to a particular incoming port.
*
* After this call, when a connection is established an
* XTCP_NEW_CONNECTION event is signalled.
*
* \param port_number The local port number to listen to
* \param protocol The protocol to connect with (XTCP_PROTOCOL_TCP
* or XTCP_PROTOCOL_UDP)
*/
void listen(int port_number, xtcp_protocol_t protocol);
/** \brief Stop listening to a particular incoming port.
*
* \param port_number local port number to stop listening on
*/
void unlisten(unsigned port_number);
/** \brief Close a connection.
*
* May still recieve data on a TCP connection. Use abort() if
* you wish to completely stop all data. Will continue to listen
* on the open port the connection came from.
*
* \param conn The connection structure to be passed in that will
* contain all the connection information.
*/
void close(const xtcp_connection_t &conn);
/** \brief Abort a connection.
*
* For UDP this is the same as closing the connection. For TCP
* the server will send a RST signal and stop all incoming data.
*
* \param conn The connection structure to be passed in that will
* contain all the connection information.
*/
void abort(const xtcp_connection_t &conn);
/** \brief Try to connect to a remote port.
*
* For TCP this will initiate the three way handshake.
* For UDP this will assign a random local port and bind the remote
* end of the connection to the host specified.
*
* \param port_number The remote port to try to connect to
* \param ipaddr The ip addr of the remote host
* \param protocol The protocol to connect with (XTCP_PROTOCOL_TCP
* or XTCP_PROTOCOL_UDP)
*/
void connect(unsigned port_number, xtcp_ipaddr_t ipaddr, xtcp_protocol_t protocol);
/** \brief Send data to the connection.
*
* \param conn The connection structure to be passed in that will
* contain all the connection information.
* \param data An array of data to send
* \param len The length of data to send. If this is 0, no data will
* be sent and a XTCP_SENT_DATA event will not occur.
*/
void send(const xtcp_connection_t &conn, char data[], unsigned len);
/** \brief Subscribe to a particular IP multicast group address.
*
* \param addr The address of the multicast group to join. It is
* assumed that this is a multicast IP address.
*/
void join_multicast_group(xtcp_ipaddr_t addr);
/** \brief Unsubscribe from a particular IP multicast group address.
*
* \param addr The address of the multicast group to leave. It is
* assumed that this is a multicast IP address.
*/
void leave_multicast_group(xtcp_ipaddr_t addr);
/** \brief Set the connections application state data item
*
* After this call, subsequent events on this connection
* will have the appstate field of the connection set.
*
* \param conn The connection structure to be passed in that will
* contain all the connection information.
* \param appstate An unsigned integer representing the state. In C
* this is usually a pointer to some connection dependent
* information.
*/
void set_appstate(const xtcp_connection_t &conn, xtcp_appstate_t appstate);
/** \brief Bind the local end of a connection to a particular port (UDP).
*
* \param conn The connection structure to be passed in that will
* contain all the connection information.
* \param port_number The local port to set the connection to.
*/
void bind_local_udp(const xtcp_connection_t &conn, unsigned port_number);
/** \brief Bind the remote end of a connection to a particular port and
* ip address (UDP).
*
* After this call, packets sent to this connection will go to
* the specified address and port
*
* \param conn The connection structure to be passed in that will
* contain all the connection information.
* \param ipaddr The intended remote address of the connection
* \param port_number The intended remote port of the connection
*/
void bind_remote_udp(const xtcp_connection_t &conn, xtcp_ipaddr_t ipaddr, unsigned port_number);
/** \brief Request a hosts IP address from a URL.
*
* \param hostname The human readable host name, e.g. "www.xmos.com"
* \param name_len The length of the hostname in characters
* \note LWIP ONLY.
*/
void request_host_by_name(const char hostname[], unsigned name_len);
/** \brief Fill the provided ipconfig address with the current state of the server.
*
* \param ipconfig IPconfig to be filled.
*/
void get_ipconfig(xtcp_ipconfig_t &ipconfig);
} xtcp_if;
typedef struct pbuf * unsafe pbuf_p;
/** WiFi/xtcp data interface - mii.h equivalent
* TODO: document
*/
typedef interface xtcp_pbuf_if {
/** TODO: document */
[[clears_notification]]
pbuf_p receive_packet();
[[notification]]
slave void packet_ready();
/** TODO: document */
void send_packet(pbuf_p p);
// TODO: Add function to notify clients of received packets
} xtcp_pbuf_if;
typedef enum {
ARP_TIMEOUT = 0,
AUTOIP_TIMEOUT,
TCP_TIMEOUT,
IGMP_TIMEOUT,
DHCP_COARSE_TIMEOUT,
DHCP_FINE_TIMEOUT,
NUM_TIMEOUTS
} xtcp_lwip_timeout_type;
/** Function implementing the TCP/IP stack using the lwIP stack.
*
* This functions implements a TCP/IP stack that clients can access via
* interfaces.
*
* \param i_xtcp The interface array to connect to the clients.
* \param n_xtcp The number of clients to the task.
* \param i_mii If this component is connected to the mii() component
* in the Ethernet library then this interface should be
* used to connect to it. Otherwise it should be set to
* null
* \param i_eth_cfg If this component is connected to an MAC component
* in the Ethernet library then this interface should be
* used to connect to it. Otherwise it should be set to
* null.
* \param i_eth_rx If this component is connected to an MAC component
* in the Ethernet library then this interface should be
* used to connect to it. Otherwise it should be set to
* null.
* \param i_eth_tx If this component is connected to an MAC component
* in the Ethernet library then this interface should be
* used to connect to it. Otherwise it should be set to
* null.
* \param i_smi If this connection to an Ethernet SMI component is
* then the XTCP component will poll the Ethernet PHY
* for link up/link down events. Otherwise, it will
* expect link up/link down events from the connected
* Ethernet MAC.
* \param phy_address The SMI address of the Ethernet PHY
* \param mac_address If this array is non-null then it will be used to set
* the MAC address of the component.
* \param otp_ports If this port structure is non-null then the component
* will obtain the MAC address from OTP ROM. See the OTP
* reading library user guide for details.
* \param ipconfig This :c:type:`xtcp_ipconfig_t` structure is used
* to determine the IP address configuration of the
* component.
*/
void xtcp_lwip(server xtcp_if i_xtcp[n_xtcp],
static const unsigned n_xtcp,
client mii_if ?i_mii,
client ethernet_cfg_if ?i_eth_cfg,
client ethernet_rx_if ?i_eth_rx,
client ethernet_tx_if ?i_eth_tx,
client smi_if ?i_smi,
uint8_t phy_address,
const char (&?mac_address0)[6],
otp_ports_t &?otp_ports,
xtcp_ipconfig_t &ipconfig);
/** Function implementing the TCP/IP stack task using the uIP stack.
*
* This functions implements a TCP/IP stack that clients can access via
* interfaces.
*
* \param i_xtcp The interface array to connect to the clients.
* \param n_xtcp The number of clients to the task.
* \param i_mii If this component is connected to the mii() component
* in the Ethernet library then this interface should be
* used to connect to it. Otherwise it should be set to
* null
* \param i_eth_cfg If this component is connected to an MAC component
* in the Ethernet library then this interface should be
* used to connect to it. Otherwise it should be set to
* null.
* \param i_eth_rx If this component is connected to an MAC component
* in the Ethernet library then this interface should be
* used to connect to it. Otherwise it should be set to
* null.
* \param i_eth_tx If this component is connected to an MAC component
* in the Ethernet library then this interface should be
* used to connect to it. Otherwise it should be set to
* null.
* \param i_smi If this connection to an Ethernet SMI component is
* then the XTCP component will poll the Ethernet PHY
* for link up/link down events. Otherwise, it will
* expect link up/link down events from the connected
* Ethernet MAC.
* \param phy_address The SMI address of the Ethernet PHY
* \param mac_address If this array is non-null then it will be used to set
* the MAC address of the component.
* \param otp_ports If this port structure is non-null then the component
* will obtain the MAC address from OTP ROM. See the OTP
* reading library user guide for details.
* \param ipconfig This :c:type:`xtcp_ipconfig_t` structure is used
* to determine the IP address configuration of the
* component.
*/
void xtcp_uip(server xtcp_if i_xtcp[n_xtcp],
static const unsigned n_xtcp,
client mii_if ?i_mii,
client ethernet_cfg_if ?i_eth_cfg,
client ethernet_rx_if ?i_eth_rx,
client ethernet_tx_if ?i_eth_tx,
client smi_if ?i_smi,
uint8_t phy_address,
const char (&?mac_address0)[6],
otp_ports_t &?otp_ports,
xtcp_ipconfig_t &ipconfig);
#endif /* __XC__ */
/** Copy an IP address data structure.
*/
#define XTCP_IPADDR_CPY(dest, src) do { dest[0] = src[0]; \
dest[1] = src[1]; \
dest[2] = src[2]; \
dest[3] = src[3]; \
} while (0)
/** Compare two IP address structures.
*/
#define XTCP_IPADDR_CMP(a, b) (a[0] == b[0] && \
a[1] == b[1] && \
a[2] == b[2] && \
a[3] == b[3])
#endif // __xtcp_h__PK BDuJRSZ Z " lib_xtcp/lib_xtcp/doc/pdf/xtcp.pdf%PDF-1.5
%
1 0 obj
<< /S /GoTo /D (section*.1) >>
endobj
4 0 obj
(TCP/IP Library)
endobj
5 0 obj
<< /S /GoTo /D (section.1) >>
endobj
8 0 obj
(Usage)
endobj
9 0 obj
<< /S /GoTo /D (subsection.1.1) >>
endobj
12 0 obj
(IP Configuration)
endobj
13 0 obj
<< /S /GoTo /D (subsection.1.2) >>
endobj
16 0 obj
(Events and Connections)
endobj
17 0 obj
<< /S /GoTo /D (subsection.1.3) >>
endobj
20 0 obj
(New Connections)
endobj
21 0 obj
<< /S /GoTo /D (subsection.1.4) >>
endobj
24 0 obj
(TCP and UDP)
endobj
25 0 obj
<< /S /GoTo /D (subsection.1.5) >>
endobj
28 0 obj
(Receiving Data)
endobj
29 0 obj
<< /S /GoTo /D (subsection.1.6) >>
endobj
32 0 obj
(Sending Data)
endobj
33 0 obj
<< /S /GoTo /D (subsection.1.7) >>
endobj
36 0 obj
(Link Status Events)
endobj
37 0 obj
<< /S /GoTo /D (subsection.1.8) >>
endobj
40 0 obj
(Configuration)
endobj
41 0 obj
<< /S /GoTo /D (section.2) >>
endobj
44 0 obj
(Configuration API)
endobj
45 0 obj
<< /S /GoTo /D (subsection.2.1) >>
endobj
48 0 obj
(Configuration Defines)
endobj
49 0 obj
<< /S /GoTo /D (section.3) >>
endobj
52 0 obj
(Functional API)
endobj
53 0 obj
<< /S /GoTo /D (subsection.3.1) >>
endobj
56 0 obj
(Data Structures/Types)
endobj
57 0 obj
<< /S /GoTo /D (subsection.3.2) >>
endobj
60 0 obj
(Server API)
endobj
61 0 obj
<< /S /GoTo /D (subsection.3.3) >>
endobj
64 0 obj
(Client API)
endobj
65 0 obj
<< /S /GoTo /D (section.A) >>
endobj
68 0 obj
(Known Issues)
endobj
69 0 obj
<< /S /GoTo /D (section.B) >>
endobj
72 0 obj
(TCP/IP library change log)
endobj
73 0 obj
<< /S /GoTo /D (subsection.B.1) >>
endobj
76 0 obj
(6.0.0)
endobj
77 0 obj
<< /S /GoTo /D (subsection.B.2) >>
endobj
80 0 obj
(5.1.0)
endobj
81 0 obj
<< /S /GoTo /D (subsection.B.3) >>
endobj
84 0 obj
(5.0.0)
endobj
85 0 obj
<< /S /GoTo /D (subsection.B.4) >>
endobj
88 0 obj
(4.0.3)
endobj
89 0 obj
<< /S /GoTo /D (subsection.B.5) >>
endobj
92 0 obj
(4.0.2)
endobj
93 0 obj
<< /S /GoTo /D (subsection.B.6) >>
endobj
96 0 obj
(4.0.1)
endobj
97 0 obj
<< /S /GoTo /D (subsection.B.7) >>
endobj
100 0 obj
(4.0.0)
endobj
101 0 obj
<< /S /GoTo /D (subsection.B.8) >>
endobj
104 0 obj
(Legacy release history)
endobj
105 0 obj
<< /S /GoTo /D (subsection.B.9) >>
endobj
108 0 obj
(3.2.1)
endobj
109 0 obj
<< /S /GoTo /D (subsection.B.10) >>
endobj
112 0 obj
(3.2.0)
endobj
113 0 obj
<< /S /GoTo /D (subsection.B.11) >>
endobj
116 0 obj
(3.1.5)
endobj
117 0 obj
<< /S /GoTo /D (subsection.B.12) >>
endobj
120 0 obj
(3.1.4)
endobj
121 0 obj
<< /S /GoTo /D (subsection.B.13) >>
endobj
124 0 obj
(3.1.3)
endobj
125 0 obj
<< /S /GoTo /D (subsection.B.14) >>
endobj
128 0 obj
(3.1.2)
endobj
129 0 obj
<< /S /GoTo /D (subsection.B.15) >>
endobj
132 0 obj
(3.1.1)
endobj
133 0 obj
<< /S /GoTo /D (subsection.B.16) >>
endobj
136 0 obj
(3.1.0)
endobj
137 0 obj
<< /S /GoTo /D (subsection.B.17) >>
endobj
140 0 obj
(3.0.1)
endobj
141 0 obj
<< /S /GoTo /D (subsection.B.18) >>
endobj
144 0 obj
(3.0.0)
endobj
145 0 obj
<< /S /GoTo /D (subsection.B.19) >>
endobj
148 0 obj
(2.0.1)
endobj
149 0 obj
<< /S /GoTo /D (subsection.B.20) >>
endobj
152 0 obj
(2.0.0)
endobj
153 0 obj
<< /S /GoTo /D (subsection.B.21) >>
endobj
156 0 obj
(1.3.1)
endobj
157 0 obj
<< /S /GoTo /D [158 0 R /Fit] >>
endobj
161 0 obj <<
/Length 1967
/Filter /FlateDecode
>>
stream
xڵYmo8_^`Mo46ͥ)vqPd*^I/o(eIVl79Çzsz.Sy~@XxaI#/]^q:XzɼwsUS4H{)@Ó'#F8hfow?L&_OB ^\=tO"_SndFLjW* CAAd>g}Ѐ6;ac=(?deR>ޔKNo=COVdۺzmyת,:([c?CT۱֩mmU'<~-M@.&Q%Ejmd}^(k4
+(+UN"djmv3OU9آLP.SU dM^_cKlwȋN>,<40J"1x )!Ju9˛L$ISXͿP\P+)f6 4N_@ܸ}V Ww?Z;ysҗm[ԯZVOVBER
,MJe,$E{ro.K[U2W|T9H"nksFihh8uWp*Ae0[BlX/\j (Y@.BW/EVk"_ڱ?a7eUیSfr|'$,oefj'glv -Taaγyaq2+eLc\uiܝ]ր!0`F[58$m]ͳëɬ`rNtL&1
;4.4v4o2P&3mV4Oy}#6݈PjѠ=z̿nMo;7\E,lV4Q
+j1;!?v\;[p4v.PΡ! .+X!Y`Gl ۜqCg
#8p/s>d9Y%,h|,GP"q "()p_:J"B&'<0"`i0&6$!<&\'Mi!Q_"#lDc/*{>nx2ce.*=@WttuQ90UlY-Ku1> 9@T vDfx1y D_2qH騄t\QJ:*#(&`$S%QR %)(&RY0a:J:` %)|sxסo?d&%^<70p3U:9&%\t^6F[Nək&Ӽyؤ5Pvp#>FkE_V_QX1ΉS=\^zU5:oY0(jODZM V!8ƨ^*=,+,Sp5]WYwoY?^n=T*""䐒 wr*O0pwcUupP^?Q]4Ƅ<38gUyūw+xD,D^vYtEwzԫ㗠07s3M=aRvK-uE
+M0[JC>n/
endstream
endobj
158 0 obj <<
/Type /Page
/Contents 161 0 R
/Resources 160 0 R
/MediaBox [0 0 595.276 841.89]
/Parent 167 0 R
>> endobj
159 0 obj <<
/Type /XObject
/Subtype /Form
/FormType 1
/PTEX.FileName (/buildbot_worker/NightlyLibs_xmos_docker/build/sb/Installs/Linux/External/xdoc/xdoc/texinputs/xmoslogo18pt.pdf)
/PTEX.PageNumber 1
/PTEX.InfoDict 168 0 R
/BBox [0 0 53.8584 15.0234]
/LastModified (D:20120829081646+01'00')
/PieceInfo <<
/Illustrator 169 0 R
>>
/Resources <<
/ColorSpace <<
/CS0 170 0 R
/CS1 171 0 R
/CS2 172 0 R
>>/ExtGState <<
/GS0 173 0 R
>>/Properties <<
/MC0 <<
/Color [ 20224 32768 65535]
/Dimmed false
/Editable true
/Preview true
/Printed true
/Title (Layer 1)
/Visible true
>>
>>>>
/Length 1293
/Filter /FlateDecode
>>
stream
HlWˎ6+el>#OW5)ͬ
;,쮮.9oOxeߎ}۾كhdOƲ琵ǯۭ.1BcSЫd]èX(7g'42]d>oloX4disj'ikzWd7{*2"ð)v ?WNpl=$]$kD6n+"L3-QDGqΎ X~!J7j4#hrD?2T&-Amb{밬ΐ>>6hKHޅS2"^bPCVŲB:3V9EB.,frSFfUԬꡘfApT©㔲r)S}*8tB2RL[k 8vL6v6t]_TZGsei!#Y)MjbNfFⱫ4lLؙQ*Xi;3qMXST`2nM+Isx MۄIƋűfyy)ShX͵u1]0
ĉ)ZY0-PR(+͆ՐO f䫂Laq¦X9(cNpU0I` 5.29)kQox壌->闞mkf 41O<
$21˲K&Щwm D&