summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Blum <josh@joshknows.com>2010-02-11 20:24:01 -0800
committerJosh Blum <josh@joshknows.com>2010-02-11 20:24:01 -0800
commit350f5c5decca20a54132867283448fd32226bbc2 (patch)
tree261ec83435d3625ea307e21813ea814113278b79
parent6c7d9f1f7573fc73522499573560bf1aef64f414 (diff)
downloaduhd-350f5c5decca20a54132867283448fd32226bbc2.tar.gz
uhd-350f5c5decca20a54132867283448fd32226bbc2.tar.bz2
uhd-350f5c5decca20a54132867283448fd32226bbc2.zip
Getting hello packets from the usrp2 with ip and mac addrs.
Cleaned up the mb build system a bit.
-rw-r--r--firmware/microblaze/Makefile.common70
-rw-r--r--firmware/microblaze/apps/Makefile.am5
-rw-r--r--firmware/microblaze/apps/txrx.c24
-rw-r--r--firmware/microblaze/configure.ac7
-rw-r--r--firmware/microblaze/lib/Makefile.am5
-rw-r--r--firmware/microblaze/lib/microblaze.ld163
-rw-r--r--include/uhd/device.hpp2
-rw-r--r--include/uhd/transport/udp.hpp7
-rw-r--r--include/uhd/usrp/usrp.hpp4
-rw-r--r--include/uhd/wax.hpp3
-rw-r--r--lib/transport/udp.cpp16
-rw-r--r--lib/usrp/mboard/usrp2.cpp29
-rw-r--r--lib/usrp/mboard/usrp2_fw_common.h1
-rw-r--r--lib/usrp/usrp.cpp4
-rw-r--r--lib/wax.cpp8
-rw-r--r--test/wax_test.cpp6
16 files changed, 117 insertions, 237 deletions
diff --git a/firmware/microblaze/Makefile.common b/firmware/microblaze/Makefile.common
index cb09f7f9d..3d0f540d8 100644
--- a/firmware/microblaze/Makefile.common
+++ b/firmware/microblaze/Makefile.common
@@ -17,6 +17,9 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
+########################################################################
+# lwIP header include dirs
+########################################################################
LWIPDIR = $(top_srcdir)/lwip/lwip-1.3.1
LWIP_INCLUDES = \
@@ -25,50 +28,55 @@ LWIP_INCLUDES = \
-I$(LWIPDIR)/src/include \
-I$(LWIPDIR)/src/include/ipv4
-STD_INCLUDES = \
+########################################################################
+# local include dirs
+########################################################################
+LOCAL_INCLUDES = \
-I$(top_srcdir)/include \
- -I$(top_srcdir)/lib \
- -I$(top_srcdir)/../../lib/usrp/mboard \
- $(LWIP_INCLUDES)
+ -I$(top_srcdir)/lib
-#HAL_IO = -DHAL_IO_USES_DBOARD_PINS
-HAL_IO = -DHAL_IO_USES_UART
-
-AM_CPPFLAGS = $(HAL_IO) $(STD_INCLUDES)
+########################################################################
+# misc flags for the mb-gcc compiler
+########################################################################
+MBGCC_CFLAGS = \
+ --std=gnu99 -Wall -Werror-implicit-function-declaration \
+ -mxl-soft-div -msoft-float -mxl-soft-mul -mxl-barrel-shift
-STD_CFLAGS = --std=gnu99 -Wall -Werror-implicit-function-declaration -mxl-soft-div -msoft-float
+MBGCC_LFLAGS = -Wl,-defsym -Wl,_STACK_SIZE=3072
-MB_CFLAGS = -mxl-soft-mul -mxl-barrel-shift
-
-AM_CFLAGS = $(STD_CFLAGS) $(MB_CFLAGS)
-#AM_CFLAGS = $(STD_CFLAGS) -mxl-soft-mul -mxl-barrel-shift -mxl-gp-opt -G 16384
+########################################################################
+# define for the hal io (FIXME move?)
+########################################################################
+#HAL_IO = -DHAL_IO_USES_DBOARD_PINS
+HAL_IO = -DHAL_IO_USES_UART
+########################################################################
+# set the cflags and ldflags
+########################################################################
+AM_CFLAGS = $(MBGCC_CFLAGS) $(LOCAL_INCLUDES) $(LWIP_INCLUDES) $(HAL_IO)
-#LINKER_SCRIPT = $(top_srcdir)/lib/microblaze.ld
-#AM_LDFLAGS = -Wl,-T,$(LINKER_SCRIPT) -Wl,-defsym -Wl,_STACK_SIZE=1024
-#AM_LDFLAGS = -Wl,-T,$(LINKER_SCRIPT) -Wl,-Map -Wl,$@.map
-#AM_LDFLAGS = -Wl,-T,$(LINKER_SCRIPT)
-AM_LDFLAGS = -Wl,-Map -Wl,$(@:.elf=.map) -Wl,-defsym -Wl,_STACK_SIZE=3072
-#AM_LDFLAGS = -Wl,-defsym -Wl,_STACK_SIZE=2048
+AM_LDFLAGS = $(MBGCC_LFLAGS)
+########################################################################
+# Common stuff for building top level microblaze images
+########################################################################
+AM_LDFLAGS += -Wl,-Map -Wl,$(@:.elf=.map)
%.bin : %.elf
- mb-objcopy -O binary $< $@
+ $(MB_OBJCOPY) -O binary $< $@
%.dump : %.elf
- mb-objdump -DSC $< > $@
+ $(MB_OBJDUMP) -DSC $< > $@
%.rom : %.bin
- hexdump -v -e'1/1 "%.2X\n"' $< > $@
-
-
-#.PRECIOUS : %.bin
-
+ $(HEXDUMP) -v -e'1/1 "%.2X\n"' $< > $@
-BINS = $(noinst_PROGRAMS:.elf=.bin)
-ROMS = $(noinst_PROGRAMS:.elf=.rom)
-DUMPS = $(noinst_PROGRAMS:.elf=.dump)
+_generated_from_elf = \
+ $(noinst_PROGRAMS:.elf=.map) \
+ $(noinst_PROGRAMS:.elf=.bin) \
+ $(noinst_PROGRAMS:.elf=.dump) \
+ $(noinst_PROGRAMS:.elf=.rom)
-noinst_DATA = $(BINS) $(ROMS) $(DUMPS)
+noinst_DATA = $(_generated_from_elf)
-CLEANFILES = $(ROMS) $(DUMPS) $(BINS)
+MOSTLYCLEANFILES = $(_generated_from_elf)
diff --git a/firmware/microblaze/apps/Makefile.am b/firmware/microblaze/apps/Makefile.am
index 8e4551083..eb6ee6534 100644
--- a/firmware/microblaze/apps/Makefile.am
+++ b/firmware/microblaze/apps/Makefile.am
@@ -19,7 +19,9 @@
include $(top_srcdir)/Makefile.common
-LDADD = ../lib/libu2fw.a
+LDADD = $(top_srcdir)/lib/libu2fw.a
+
+AM_CFLAGS += -I$(top_srcdir)/../../lib/usrp/mboard
noinst_PROGRAMS = txrx.elf
@@ -78,4 +80,3 @@ txrx_elf_SOURCES = txrx.c
# mimo_app_common_v2.h
#
-MOSTLYCLEANFILES = *.map
diff --git a/firmware/microblaze/apps/txrx.c b/firmware/microblaze/apps/txrx.c
index 23a88c246..1c43a2ca1 100644
--- a/firmware/microblaze/apps/txrx.c
+++ b/firmware/microblaze/apps/txrx.c
@@ -160,7 +160,29 @@ void handle_udp_ctrl_packet(
unsigned char *payload, int payload_len
){
printf("Got ctrl packet #words: %d\n", (int)payload_len);
- send_udp_pkt(USRP2_UDP_CTRL_PORT, src, payload, payload_len);
+ if (payload_len < sizeof(usrp2_ctrl_data_t)){
+ //TODO send err packet
+ return;
+ }
+ //setup the input and output data
+ usrp2_ctrl_data_t *ctrl_data_in = (usrp2_ctrl_data_t *)payload;
+ usrp2_ctrl_data_t ctrl_data_out = {
+ .id=USRP2_CTRL_ID_NONE,
+ .seq=ctrl_data_in->seq
+ };
+ //handle the data based on the id
+ switch(ctrl_data_in->id){
+ case USRP2_CTRL_ID_HELLO:
+ ctrl_data_out.id = ctrl_data_in->id;
+ //grab the addrs
+ struct ip_addr ip_addr = get_my_ip_addr();
+ eth_mac_addr_t mac_addr = get_my_eth_mac_addr();
+ //copy them into the out data
+ memcpy(&ctrl_data_out.data.discovery_addrs.ip_addr, &ip_addr, sizeof(ip_addr));
+ memcpy(&ctrl_data_out.data.discovery_addrs.mac_addr, &mac_addr, sizeof(mac_addr));
+ break;
+ }
+ send_udp_pkt(USRP2_UDP_CTRL_PORT, src, &ctrl_data_out, sizeof(ctrl_data_out));
}
/*
diff --git a/firmware/microblaze/configure.ac b/firmware/microblaze/configure.ac
index cbb9e1a93..46968b7fb 100644
--- a/firmware/microblaze/configure.ac
+++ b/firmware/microblaze/configure.ac
@@ -35,6 +35,13 @@ AC_PROG_CC([mb-gcc])
LT_INIT
##################################################
+## Setup Tools
+##################################################
+AC_PATH_PROG([MB_OBJCOPY], [mb-objcopy])
+AC_PATH_PROG([MB_OBJDUMP], [mb-objdump])
+AC_PATH_PROG([HEXDUMP], [hexdump])
+
+##################################################
## Create Files
##################################################
AC_CONFIG_FILES([ \
diff --git a/firmware/microblaze/lib/Makefile.am b/firmware/microblaze/lib/Makefile.am
index 02e9dda73..4ca05739c 100644
--- a/firmware/microblaze/lib/Makefile.am
+++ b/firmware/microblaze/lib/Makefile.am
@@ -1,4 +1,6 @@
#
+# Copyright 2010 Ettus Research LLC
+#
# Copyright 2007 Free Software Foundation, Inc.
#
# This program is free software: you can redistribute it and/or modify
@@ -93,6 +95,3 @@ noinst_HEADERS = \
arp_cache.h \
banal.h \
ethertype.h
-
-EXTRA_DIST = \
- microblaze.ld
diff --git a/firmware/microblaze/lib/microblaze.ld b/firmware/microblaze/lib/microblaze.ld
deleted file mode 100644
index ef816cf2e..000000000
--- a/firmware/microblaze/lib/microblaze.ld
+++ /dev/null
@@ -1,163 +0,0 @@
-OUTPUT_FORMAT("elf32-microblaze", "", "")
-/* SEARCH_DIR(/home/jwilliams/tmp/microblaze-toolchain-sources/release/lin/microblaze//lib);*/
-
-ENTRY(_start)
-
-MEMORY {
- flatmem : ORIGIN = 0x0, LENGTH = 0x00008000 /* 32KB */
-}
-
-SECTIONS
-{
- _TEXT_START_ADDR = DEFINED(_TEXT_START_ADDR) ? _TEXT_START_ADDR : 0x50;
- .vectors.reset 0x0 : { *(.vectors.reset) } > flatmem
- .vectors.sw_exception 0x8 : { *(.vectors.sw_exception) } > flatmem
- .vectors.interrupt 0x10 : { *(.vectors.interrupt) } > flatmem
- .vectors.hw_exception 0x20 : { *(.vectors.hw_exception) } >flatmem
- . = _TEXT_START_ADDR;
- _ftext = .;
- .text : {
- *(.text)
- *(.text.*)
- *(.gnu.linkonce.t.*)
- } > flatmem
- _etext = .;
- .init : { KEEP (*(.init)) } > flatmem =0
- .fini : { KEEP (*(.fini)) } > flatmem =0
- PROVIDE (__CTOR_LIST__ = .);
- PROVIDE (___CTOR_LIST__ = .);
- .ctors :
- {
- /* gcc uses crtbegin.o to find the start of
- the constructors, so we make sure it is
- first. Because this is a wildcard, it
- doesn't matter if the user does not
- actually link against crtbegin.o; the
- linker won't look for a file to match a
- wildcard. The wildcard also means that it
- doesn't matter which directory crtbegin.o
- is in. */
- KEEP (*crtbegin.o(.ctors))
- /* We don't want to include the .ctor section from
- from the crtend.o file until after the sorted ctors.
- The .ctor section from the crtend file contains the
- end of ctors marker and it must be last */
- KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
- KEEP (*(SORT(.ctors.*)))
- KEEP (*(.ctors))
- } > flatmem
- PROVIDE (__CTOR_END__ = .);
- PROVIDE (___CTOR_END__ = .);
- PROVIDE (__DTOR_LIST__ = .);
- PROVIDE (___DTOR_LIST__ = .);
- .dtors :
- {
- KEEP (*crtbegin.o(.dtors))
- KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
- KEEP (*(SORT(.dtors.*)))
- KEEP (*(.dtors))
- } > flatmem
- PROVIDE (__DTOR_END__ = .);
- PROVIDE (___DTOR_END__ = .);
- . = ALIGN(4);
- _frodata = . ;
- .rodata : {
- *(.rodata)
- *(.gnu.linkonce.r.*)
- CONSTRUCTORS; /* Is this needed? */
- } > flatmem
- _erodata = .;
- /* Alignments by 8 to ensure that _SDA2_BASE_ on a word boundary */
- /* Note that .sdata2 and .sbss2 must be contiguous */
- . = ALIGN(8);
- _ssrw = .;
- .sdata2 : {
- *(.sdata2)
- *(.gnu.linkonce.s2.*)
- } > flatmem
- . = ALIGN(4);
- .sbss2 : {
- PROVIDE (__sbss2_start = .);
- *(.sbss2)
- *(.gnu.linkonce.sb2.*)
- PROVIDE (__sbss2_end = .);
- } > flatmem
- . = ALIGN(8);
- _essrw = .;
- _ssrw_size = _essrw - _ssrw;
- PROVIDE (_SDA2_BASE_ = _ssrw + (_ssrw_size / 2 ));
- . = ALIGN(4);
- _fdata = .;
- .data : {
- *(.data)
- *(.gnu.linkonce.d.*)
- CONSTRUCTORS; /* Is this needed? */
- } > flatmem
- _edata = . ;
- /* Added to handle pic code */
- .got : {
- *(.got)
- } > flatmem
- .got1 : {
- *(.got1)
- } > flatmem
- .got2 : {
- *(.got2)
- } > flatmem
- /* Added by Sathya to handle C++ exceptions */
- .eh_frame : {
- *(.eh_frame)
- } > flatmem
- .jcr : {
- *(.jcr)
- } > flatmem
- .gcc_except_table : {
- *(.gcc_except_table)
- } > flatmem
- /* Alignments by 8 to ensure that _SDA_BASE_ on a word boundary */
- /* Note that .sdata and .sbss must be contiguous */
- . = ALIGN(8);
- _ssro = .;
- .sdata : {
- *(.sdata)
- *(.gnu.linkonce.s.*)
- } > flatmem
- . = ALIGN(4);
- .sbss : {
- PROVIDE (__sbss_start = .);
- *(.sbss)
- *(.gnu.linkonce.sb.*)
- PROVIDE (__sbss_end = .);
- } > flatmem
- . = ALIGN(8);
- _essro = .;
- _ssro_size = _essro - _ssro;
- PROVIDE (_SDA_BASE_ = _ssro + (_ssro_size / 2 ));
- . = ALIGN(4);
- _fbss = .;
- .bss : {
- PROVIDE (__bss_start = .);
- *(.bss)
- *(.gnu.linkonce.b.*)
- *(COMMON)
- . = ALIGN(4);
- PROVIDE (__bss_end = .);
- _heap = .;
- _HEAP_SIZE = DEFINED(_HEAP_SIZE) ? _HEAP_SIZE : 0x0;
- _STACK_SIZE = DEFINED(_STACK_SIZE) ? _STACK_SIZE : 0x800;
- . += _HEAP_SIZE;
- _heap_end = .;
- . += _STACK_SIZE;
- . = ALIGN(8);
- _stack = .;
- _end = .;
- } > flatmem
- .tdata : {
- *(.tdata)
- *(.gnu.linkonce.td.*)
- } > flatmem
- .tbss : {
- *(.tbss)
- *(.gnu.linkonce.tb.*)
- } > flatmem
-}
diff --git a/include/uhd/device.hpp b/include/uhd/device.hpp
index 84d1c1bfb..09a2bbb2f 100644
--- a/include/uhd/device.hpp
+++ b/include/uhd/device.hpp
@@ -73,7 +73,7 @@ public:
//the io interface
virtual void send_raw(const std::vector<boost::asio::const_buffer> &) = 0;
- virtual const boost::asio::const_buffer recv_raw(void) = 0;
+ virtual boost::asio::const_buffer recv_raw(void) = 0;
};
} //namespace uhd
diff --git a/include/uhd/transport/udp.hpp b/include/uhd/transport/udp.hpp
index 67979afac..c9a9dd53b 100644
--- a/include/uhd/transport/udp.hpp
+++ b/include/uhd/transport/udp.hpp
@@ -52,17 +52,16 @@ public:
/*!
* Send a single buffer.
- * \param buff a pointer into memory
- * \param len the length in bytes
+ * \param buff single asio buffer
*/
- void send(const void *buff, size_t len);
+ void send(const boost::asio::const_buffer &buff);
/*!
* Receive a buffer. The memory is managed internally.
* Calling recv will invalidate the buffer of the previous recv.
* \return an asio const buffer with internal memory
*/
- const boost::asio::const_buffer recv(void);
+ boost::asio::const_buffer recv(void);
private:
boost::asio::ip::udp::socket *_socket;
diff --git a/include/uhd/usrp/usrp.hpp b/include/uhd/usrp/usrp.hpp
index 84890b8fe..975debed1 100644
--- a/include/uhd/usrp/usrp.hpp
+++ b/include/uhd/usrp/usrp.hpp
@@ -37,7 +37,7 @@ public:
//the io interface
void send_raw(const std::vector<boost::asio::const_buffer> &);
- const boost::asio::const_buffer recv_raw(void);
+ boost::asio::const_buffer recv_raw(void);
private:
void get(const wax::obj &, wax::obj &);
@@ -45,7 +45,7 @@ private:
std::map<std::string, mboard::base::sptr> _mboards;
boost::function<void(const std::vector<boost::asio::const_buffer> &)> _send_raw_cb;
- boost::function<const boost::asio::const_buffer(void)> _recv_raw_cb;
+ boost::function<boost::asio::const_buffer(void)> _recv_raw_cb;
};
}} //namespace
diff --git a/include/uhd/wax.hpp b/include/uhd/wax.hpp
index 29a96cdb6..1d5054351 100644
--- a/include/uhd/wax.hpp
+++ b/include/uhd/wax.hpp
@@ -164,7 +164,4 @@ namespace wax{
} //namespace wax
-//ability to use wax::obj with stream operators
-std::ostream& operator<<(std::ostream &, const wax::obj &);
-
#endif /* INCLUDED_WAX_HPP */
diff --git a/lib/transport/udp.cpp b/lib/transport/udp.cpp
index 5b221551b..f42ddcb75 100644
--- a/lib/transport/udp.cpp
+++ b/lib/transport/udp.cpp
@@ -17,6 +17,7 @@
#include <uhd/transport/udp.hpp>
#include <boost/format.hpp>
+#include <boost/assign/list_of.hpp>
#include <iostream>
uhd::transport::udp::udp(const std::string &addr, const std::string &port, bool bcast){
@@ -47,19 +48,20 @@ void uhd::transport::udp::send(const std::vector<boost::asio::const_buffer> &buf
_socket->send_to(buffs, _receiver_endpoint);
}
-void uhd::transport::udp::send(const void *buff, size_t len){
- _socket->send_to(boost::asio::buffer(buff, len), _receiver_endpoint);
+void uhd::transport::udp::send(const boost::asio::const_buffer &buff){
+ std::vector<boost::asio::const_buffer> buffs = boost::assign::list_of(buff);
+ send(buffs);
}
-const boost::asio::const_buffer uhd::transport::udp::recv(void){
+boost::asio::const_buffer uhd::transport::udp::recv(void){
+ size_t len = 0;
//recv if data is available
if (_socket->available()){
- size_t len = _socket->receive_from(
+ len = _socket->receive_from(
boost::asio::buffer(_recv_buff, sizeof(_recv_buff)),
_sender_endpoint
);
- return boost::asio::buffer(_recv_buff, len);
}
- //return an empty buffer
- return boost::asio::buffer(_recv_buff, 0);
+ //return the buffer with the received length
+ return boost::asio::buffer(_recv_buff, len);
}
diff --git a/lib/usrp/mboard/usrp2.cpp b/lib/usrp/mboard/usrp2.cpp
index d51b37602..9282a541a 100644
--- a/lib/usrp/mboard/usrp2.cpp
+++ b/lib/usrp/mboard/usrp2.cpp
@@ -21,6 +21,7 @@
#include <uhd/device.hpp>
#include <boost/thread.hpp>
#include <boost/lexical_cast.hpp>
+#include <boost/thread.hpp>
#include <netinet/in.h>
using namespace uhd::usrp::mboard;
@@ -36,11 +37,31 @@ std::vector<uhd::device_addr_t> usrp2::discover(const device_addr_t &hint){
uhd::transport::udp udp_transport(hint.udp_args.addr, ctrl_port, true);
//send a hello control packet
- usrp2_ctrl_data_t data;
- data.id = htonl(USRP2_CTRL_ID_HELLO);
- udp_transport.send(&data, sizeof(data));
+ usrp2_ctrl_data_t ctrl_data_out;
+ ctrl_data_out.id = htonl(USRP2_CTRL_ID_HELLO);
+ udp_transport.send(boost::asio::buffer(&ctrl_data_out, sizeof(ctrl_data_out)));
- //TODO start a thread to listen and sleep for timeout
+ //loop and recieve until the time is up
+ size_t num_timeouts = 0;
+ while(true){
+ boost::asio::const_buffer buff = udp_transport.recv();
+ //std::cout << boost::asio::buffer_size(buff) << "\n";
+ if (boost::asio::buffer_size(buff) < sizeof(usrp2_ctrl_data_t)){
+ //sleep a little so we dont burn cpu
+ if (num_timeouts++ > 50) break;
+ boost::this_thread::sleep(boost::posix_time::milliseconds(1));
+ }else{
+ //handle the received data
+ const usrp2_ctrl_data_t *ctrl_data_in = boost::asio::buffer_cast<const usrp2_ctrl_data_t *>(buff);
+ switch(ntohl(ctrl_data_in->id)){
+ case USRP2_CTRL_ID_HELLO:
+ //make a boost asio ipv4 with the raw addr in host byte order
+ boost::asio::ip::address_v4 ip_addr(ntohl(ctrl_data_in->data.discovery_addrs.ip_addr));
+ std::cout << "hello " << ip_addr.to_string() << "\n";
+ break;
+ }
+ }
+ }
return usrp2_addrs;
}
diff --git a/lib/usrp/mboard/usrp2_fw_common.h b/lib/usrp/mboard/usrp2_fw_common.h
index 28d58cf7c..217d8cf1c 100644
--- a/lib/usrp/mboard/usrp2_fw_common.h
+++ b/lib/usrp/mboard/usrp2_fw_common.h
@@ -33,6 +33,7 @@ extern "C" {
#define USRP2_UDP_DATA_PORT 49153
typedef enum{
+ USRP2_CTRL_ID_NONE,
USRP2_CTRL_ID_HELLO
} usrp2_ctrl_id_t;
diff --git a/lib/usrp/usrp.cpp b/lib/usrp/usrp.cpp
index d188f51a7..c49a63d49 100644
--- a/lib/usrp/usrp.cpp
+++ b/lib/usrp/usrp.cpp
@@ -32,7 +32,7 @@ static void send_raw_default(const std::vector<boost::asio::const_buffer> &){
throw std::runtime_error("No callback registered for send raw");
}
-static const boost::asio::const_buffer recv_raw_default(void){
+static boost::asio::const_buffer recv_raw_default(void){
throw std::runtime_error("No callback registered for recv raw");
}
@@ -87,6 +87,6 @@ void usrp::send_raw(const std::vector<boost::asio::const_buffer> &buffs){
return _send_raw_cb(buffs);
}
-const boost::asio::const_buffer usrp::recv_raw(void){
+boost::asio::const_buffer usrp::recv_raw(void){
return _recv_raw_cb();
}
diff --git a/lib/wax.cpp b/lib/wax.cpp
index 24f89288c..c08398c50 100644
--- a/lib/wax.cpp
+++ b/lib/wax.cpp
@@ -144,11 +144,3 @@ void wax::obj::get(const obj &, obj &){
void wax::obj::set(const obj &, const obj &){
throw std::runtime_error("Cannot call set on wax obj base class");
}
-
-/***********************************************************************
- * Friends
- **********************************************************************/
-std::ostream& operator<<(std::ostream &os, const wax::obj &x){
- os << boost::format("WAX obj (%s)") % x.type().name();
- return os;
-}
diff --git a/test/wax_test.cpp b/test/wax_test.cpp
index f51860c13..e5e1adc25 100644
--- a/test/wax_test.cpp
+++ b/test/wax_test.cpp
@@ -96,9 +96,3 @@ BOOST_AUTO_TEST_CASE(test_proxy){
wax::obj a = p[size_t(0)];
BOOST_CHECK_EQUAL(wax::cast<float>(a), float(5));
}
-
-BOOST_AUTO_TEST_CASE(test_print){
- std::cout << "print type" << std::endl;
- wax::obj test_type = float(3.33);
- std::cout << test_type << std::endl;
-}