Connections in the receiver:
RFM70 - connected to the SPI
Full documentation will be published soon on the dedicated website.
#!/bin/sh
# This is a shell archive (produced by GNU sharutils 4.9).
# To extract the files from this archive, save it to some FILE, remove
# everything before the `#!/bin/sh' line above, then type `sh FILE'.
#
lock_dir=_sh09232
# Made on 2011-01-15 15:10 CET by <wzab@wzab>.
# Source directory was `/tmp/publ'.
#
# Existing files will *not* be overwritten, unless `-c' is specified.
#
# This shar contains:
# length mode name
# ------ ---------- ------------------------------------------
# 5507 -rw-r--r-- rx/rfm70.c
# 1541 -rw-r--r-- rx/rfm70.h
# 2579 -rw-r--r-- rx/MIDI.h
# 13768 -rw-r--r-- rx/AudioInput.c
# 2894 -rw-r--r-- rx/AudioInput.h
# 611 -rw-r--r-- rx/spi_atmega32u4.h
# 16376 -rw-r--r-- rx/Descriptors.c
# 5407 -rw-r--r-- rx/Descriptors.h
# 21111 -rw-r--r-- rx/makefile
# 57 -rw-r--r-- rx/abuf.h
# 53446 -rw-r--r-- rx/AudioInput.lst
# 936 -rw-r--r-- rx/byte_select.h
# 433 -rw-r--r-- customize.h
# 5458 -rw-r--r-- tx_adc/Makefile
# 485 -rw-r--r-- tx_adc/spi_atmega88.h
# 5319 -rw-r--r-- tx_adc/rfm70.c
# 1121 -rw-r--r-- tx_adc/rfm70.h
# 11001 -rw-r--r-- tx_adc/adc.c
# 236 -rw-r--r-- tx_adc/abuf.h
# 499 -rw-r--r-- tx_adc/usart_spi_atmega32u2.h
# 2185 -rw-r--r-- tx_adc/usart_spi_atmega88.h
# 55 -rw-r--r-- tx_adc/verify.sh
# 55 -rw-r--r-- tx_adc/progr.sh
# 938 -rw-r--r-- tx_adc/byte_select.h
# 3819 -rw-r--r-- tx_adc/SPI_isr.S
#
MD5SUM=${MD5SUM-md5sum}
f=`${MD5SUM} --version | egrep '^md5sum .*(core|text)utils'`
test -n "${f}" && md5check=true || md5check=false
${md5check} || \
echo 'Note: not verifying md5sums. Consider installing GNU coreutils.'
save_IFS="${IFS}"
IFS="${IFS}:"
gettext_dir=FAILED
locale_dir=FAILED
first_param="$1"
for dir in $PATH
do
if test "$gettext_dir" = FAILED && test -f $dir/gettext \
&& ($dir/gettext --version >/dev/null 2>&1)
then
case `$dir/gettext --version 2>&1 | sed 1q` in
*GNU*) gettext_dir=$dir ;;
esac
fi
if test "$locale_dir" = FAILED && test -f $dir/shar \
&& ($dir/shar --print-text-domain-dir >/dev/null 2>&1)
then
locale_dir=`$dir/shar --print-text-domain-dir`
fi
done
IFS="$save_IFS"
if test "$locale_dir" = FAILED || test "$gettext_dir" = FAILED
then
echo=echo
else
TEXTDOMAINDIR=$locale_dir
export TEXTDOMAINDIR
TEXTDOMAIN=sharutils
export TEXTDOMAIN
echo="$gettext_dir/gettext -s"
fi
if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null
then if (echo -n test; echo 1,2,3) | grep n >/dev/null
then shar_n= shar_c='
'
else shar_n=-n shar_c= ; fi
else shar_n= shar_c='\c' ; fi
f=shar-touch.$$
st1=200112312359.59
st2=123123592001.59
st2tr=123123592001.5 # old SysV 14-char limit
st3=1231235901
if touch -am -t ${st1} ${f} >/dev/null 2>&1 && \
test ! -f ${st1} && test -f ${f}; then
shar_touch='touch -am -t $1$2$3$4$5$6.$7 "$8"'
elif touch -am ${st2} ${f} >/dev/null 2>&1 && \
test ! -f ${st2} && test ! -f ${st2tr} && test -f ${f}; then
shar_touch='touch -am $3$4$5$6$1$2.$7 "$8"'
elif touch -am ${st3} ${f} >/dev/null 2>&1 && \
test ! -f ${st3} && test -f ${f}; then
shar_touch='touch -am $3$4$5$6$2 "$8"'
else
shar_touch=:
echo
${echo} 'WARNING: not restoring timestamps. Consider getting and
installing GNU `touch'\'', distributed in GNU coreutils...'
echo
fi
rm -f ${st1} ${st2} ${st2tr} ${st3} ${f}
#
if test ! -d ${lock_dir} ; then :
else ${echo} "lock directory ${lock_dir} exists"
exit 1
fi
if mkdir ${lock_dir}
then ${echo} "x - created lock directory ${lock_dir}."
else ${echo} "x - failed to create lock directory ${lock_dir}."
exit 1
fi
# ============= rx/rfm70.c ==============
if test ! -d 'rx'; then
mkdir 'rx'
if test $? -eq 0
then ${echo} "x - created directory rx."
else ${echo} "x - failed to create directory rx."
exit 1
fi
fi
if test -f 'rx/rfm70.c' && test "$first_param" != -c; then
${echo} "x - SKIPPING rx/rfm70.c (file already exists)"
else
${echo} "x - extracting rx/rfm70.c (text)"
sed 's/^X//' << 'SHAR_EOF' > 'rx/rfm70.c' &&
/*
X The code below is based on the PIC demo code for RFM70
X provided by HOPE RF.
X I (Wojciech M. Zabolotny wzab<at>ise.pw.edu.pl) have modified it
X for AVR.
X All my modifications are PUBLIC DOMAIN.
X */
X
#include "rfm70.h"
#include "../customize.h"
static PROGMEM uint8_t set1[][4]={
X {0x40, 0x4b, 0x01, 0xe2},
X {0xc0, 0x4b, 0x00, 0x00},
X {0xd0, 0xfc, 0x8c, 0x02},
X {0x99, 0x00, 0x39, 0x41},
X {0xd9, 0x9e, 0x86, 0x0b},// #?? d9 czy f9?
X {0x24, 0x06, 0x7f, 0xa6},
X {0x00, 0x00, 0x00, 0x00},
X {0x00, 0x00, 0x00, 0x00},
X {0x00, 0x00, 0x00, 0x00},
X {0x00, 0x00, 0x00, 0x00},
X {0x00, 0x00, 0x00, 0x00},
X {0x00, 0x00, 0x00, 0x00},
X {0x00, 0x12, 0x73, 0x00},
X {0x36, 0xB4, 0x80, 0x00},
};
static PROGMEM uint8_t set1_14[]={0x41,0x20,0x08,0x04,0x81,0x20,0xCF,0xF7,0xFE,0xFF,0xFF};
static PROGMEM uint8_t set0[][2]={
X {0,0x3f}, //Only RX_DR is reflected! Was:{0,0x0F}, //reflect RX_DR\TX_DS\MAX_RT,Enable CRC ,2byte,POWER UP,PRX
X {1,0x00}, //No autoacknowledge! Was:{1,0x3F}, //Enable auto acknowledgement data pipe5\4\3\2\1\0
X {2,0x01}, //Enable only RX Addresses pipe0
X {3,0x01}, //RX/TX address field width 3 bytes
X {4,0x00}, //no retransmission! Was: {4,0xff}, //auto retransmission dalay (4000us),auto retransmission count(15)
X {5,INITIAL_CHANNEL}, //(5,0x17), #23 channel
X {6,0x3f}, //6,0x17), #air data rate-1M,out power 0dbm,setup LNA gain
X {7,0x07}, //
X {8,0x00}, //
X {9,0x00}, //
X {12,0xc3},// only LSB Receive address data pipe 2, MSB bytes is equal to RX_ADDR_P1[39:8]
X {13,0xc4},// only LSB Receive address data pipe 3, MSB bytes is equal to RX_ADDR_P1[39:8]
X {14,0xc5},// only LSB Receive address data pipe 4, MSB bytes is equal to RX_ADDR_P1[39:8]
X {15,0xc6},// only LSB Receive address data pipe 5, MSB bytes is equal to RX_ADDR_P1[39:8]
X {17,0x20},// Number of bytes in RX payload in data pipe0(32 byte)
X {18,0x20},// Number of bytes in RX payload in data pipe1(32 byte)
X {19,0x20},// Number of bytes in RX payload in data pipe2(32 byte)
X {20,0x20},// Number of bytes in RX payload in data pipe3(32 byte)
X {21,0x20},// Number of bytes in RX payload in data pipe4(32 byte)
X {22,0x20},// Number of bytes in RX payload in data pipe5(32 byte)
X {23,0x00},// fifo status
X {28,0x00},// Don't enable dynamic payload length data pipe5\4\3\2\1\0
X {29,0x07},// Enables Dynamic Payload Length,Enables Payload with ACK,Enables the W_TX_PAYLOAD_NOACK command
};
static PROGMEM uint8_t cmd_activate[]={0x50,0x73};
static PROGMEM uint8_t cmd_tog1[]={0xd9 | 0x06, 0x9e, 0x86, 0x0b}; //assosciated with set1[4]!
static PROGMEM uint8_t cmd_tog2[]={0xd9 & ~0x06, 0x9e, 0x86, 0x0b};
static PROGMEM uint8_t cmd_flush_rx[]={0xe2,0x00};
static PROGMEM uint8_t cmd_flush_tx[]={0xe1,0x00};
static PROGMEM uint8_t cmd_switch_cfg[]={0x50,0x53};
static PROGMEM uint8_t adr0[]={SET_NUMBER,'W','G'};
//static PROGMEM uint8_t adr1[]={0x32,0x33,0x10,0x12,0x12};
X
uint8_t SPI_Transfer(uint8_t c);
X
X
void write_pcmd(uint8_t * cmd, uint8_t len)
{
X set_cs(1);
X set_cs(0);
X while(len--) {
X SPI_Transfer(pgm_read_byte(cmd++));
X };
X set_cs(1);
}
X
X
void switch_cfg(uint8_t cnum)
{
X uint8_t tmp = read_reg(0x07) & 0x80;
X if(cnum) {
X if(!tmp)
X write_pcmd(cmd_switch_cfg,sizeof(cmd_switch_cfg));
X } else {
X if(tmp)
X write_pcmd(cmd_switch_cfg,sizeof(cmd_switch_cfg));
X }
}
X
void switch_to_rx_mode(void)
{
X uint8_t val;
X write_pcmd(cmd_flush_rx,sizeof(cmd_flush_rx));
X val = read_reg(0x07);
X write_reg(0x07,val);
X set_ce(0);
X val=read_reg(0x00);
X val |= 0x01;
X write_reg(0x00,val);
X set_ce(1);
}
X
void switch_to_tx_mode(void)
{
X uint8_t val;
X write_pcmd(cmd_flush_tx,sizeof(cmd_flush_tx));
X set_ce(0);
X val=read_reg(0x00);
X val &= ~0x01;
X write_reg(0x00,val);
X set_ce(1);
}
X
void set_channel(uint8_t cnum)
{
X write_reg(5, cnum);
}
X
X
void write_reg_pbuf(uint8_t reg, uint8_t * buf, uint8_t len)
{
X set_cs(1);
X set_cs(0);
X SPI_Transfer(reg | 0x20);
X while(len--)
X SPI_Transfer(pgm_read_byte(buf++));
X set_cs(1);
}
X
uint8_t send_packet(uint8_t * data, uint8_t len)
{
X uint8_t status;
X switch_to_tx_mode();
X status = read_reg(0x17); //FIFO_STATUS
X if (status & 0x20) return 0xff; //Error?
X set_cs(0);
X SPI_Transfer(0xb0);
X while(len--) {
X SPI_Transfer(*(data++));
X }
X set_cs(1);
X return 0;
}
X
X
X
void receive_packet(void)
{
X uint8_t sta;
X sta = read_reg(0x07);
X if (sta & 0x40) {
X while(1) {
X uint8_t fifo_sta;
X uint8_t len = read_reg(0x60);
X while(len--) read_reg(0x61);
X fifo_sta = read_reg(0x17);
X if (fifo_sta & 0x01) break;
X }
X write_reg(0x07,sta);
X beep(0xa4);
X } else {
X beep(2);
X }
}
X
X
void rfm70_init(void)
{
X uint8_t i;
X _delay_ms(500);
X switch_cfg(0);
X for(i=0;i<20;i++) {
X write_reg(pgm_read_byte(&set0[i][0]),pgm_read_byte(&set0[i][1]));
X }
X write_reg_pbuf(10,adr0,sizeof(adr0));
X //write_reg_pbuf(11,adr1,sizeof(adr1));
X write_reg_pbuf(16,adr0,sizeof(adr0));
X if(!read_reg(29))
X write_pcmd(cmd_activate,sizeof(cmd_activate));
X write_reg(pgm_read_byte(&set0[22][0]),pgm_read_byte(&set0[22][1]));
X write_reg(pgm_read_byte(&set0[21][0]),pgm_read_byte(&set0[21][1]));
X switch_cfg(1);
X for(i=0;i<14;i++) {
X write_reg_pbuf(i,set1[i],sizeof(set1[i]));
X }
X write_reg_pbuf(14,set1_14,sizeof(set1_14));
X write_reg_pbuf(4,cmd_tog1,sizeof(cmd_tog1));
X write_reg_pbuf(4,cmd_tog2,sizeof(cmd_tog2));
X _delay_ms(50);
X //Check the ChipID
X //if (read_reg(8) != 0x63) show_error(0xaa);
X switch_cfg(0);
X switch_to_rx_mode();
}
X
X
SHAR_EOF
(set 20 11 01 15 14 44 38 'rx/rfm70.c'
eval "${shar_touch}") && \
chmod 0644 'rx/rfm70.c'
if test $? -ne 0
then ${echo} "restore of rx/rfm70.c failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'rx/rfm70.c': 'MD5 check failed'
) << \SHAR_EOF
773f5c906bd2b51940c33b1ce8135f56 rx/rfm70.c
SHAR_EOF
else
test `LC_ALL=C wc -c < 'rx/rfm70.c'` -ne 5507 && \
${echo} "restoration warning: size of 'rx/rfm70.c' is not 5507"
fi
fi
# ============= rx/rfm70.h ==============
if test ! -d 'rx'; then
mkdir 'rx'
if test $? -eq 0
then ${echo} "x - created directory rx."
else ${echo} "x - failed to create directory rx."
exit 1
fi
fi
if test -f 'rx/rfm70.h' && test "$first_param" != -c; then
${echo} "x - SKIPPING rx/rfm70.h (file already exists)"
else
${echo} "x - extracting rx/rfm70.h (text)"
sed 's/^X//' << 'SHAR_EOF' > 'rx/rfm70.h' &&
/*
X The code below is published as PUBLIC DOMAIN as Wojciech M. Zabolotny
X ( wzab<at>ise.pw.edu.pl ) 2011.01.11
X No warranty of any kind is provided! Use at your own risk!
*/
X
#ifndef _RFM70_H_
#define _RFM70_H_
X
/* Includes: */
#include <ctype.h>
#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/power.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include "spi_atmega32u4.h"
X
#define PORT_CS PORTB
#define DDR_CS DDRB
#define PIN_CS 0
#define PORT_CE PORTE
#define DDR_CE DDRE
#define PIN_CE 6
X
__attribute__ ((always_inline))
static inline void set_cs(uint8_t val)
{
X if(val)
X PORT_CS |= (1<<PIN_CS);
X else
X PORT_CS &= ~(1<<PIN_CS);
}
X
__attribute__ ((always_inline))
static inline void set_ce(uint8_t val)
{
X if(val)
X PORT_CE |= (1<<PIN_CE);
X else
X PORT_CE &= ~(1<<PIN_CE);
}
X
static inline void rfm70_hw_setup(void)
{
X DDR_CS |= (1<<PIN_CS);
X DDR_CE |= (1<<PIN_CE);
}
X
__attribute__ ((always_inline))
static inline uint8_t read_reg(uint8_t reg)
{
X uint8_t res;
X set_cs(0);
X SPI_Transfer(reg);
X res=SPI_Transfer(0);
X set_cs(1);
X return res;
}
X
__attribute__ ((always_inline))
static inline void write_reg(uint8_t reg, uint8_t val)
{
X set_cs(0);
X SPI_Transfer(reg | 0x20);
X SPI_Transfer(val);
X set_cs(1);
}
X
uint8_t read_reg(uint8_t reg);
void write_pcmd(uint8_t * cmd, uint8_t len);
void rfm70_init1(void);
void rfm70_init2(void);
void switch_to_tx_mode(void);
void switch_to_rx_mode(void);
void show_error(uint8_t msg);
void set_channel(uint8_t cnum);
#endif
SHAR_EOF
(set 20 11 01 15 14 47 58 'rx/rfm70.h'
eval "${shar_touch}") && \
chmod 0644 'rx/rfm70.h'
if test $? -ne 0
then ${echo} "restore of rx/rfm70.h failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'rx/rfm70.h': 'MD5 check failed'
) << \SHAR_EOF
4093cebd0e6e9f50e3b56a7374051f7c rx/rfm70.h
SHAR_EOF
else
test `LC_ALL=C wc -c < 'rx/rfm70.h'` -ne 1541 && \
${echo} "restoration warning: size of 'rx/rfm70.h' is not 1541"
fi
fi
# ============= rx/MIDI.h ==============
if test -f 'rx/MIDI.h' && test "$first_param" != -c; then
${echo} "x - SKIPPING rx/MIDI.h (file already exists)"
else
${echo} "x - extracting rx/MIDI.h (text)"
sed 's/^X//' << 'SHAR_EOF' > 'rx/MIDI.h' &&
/*
X LUFA Library
X Copyright (C) Dean Camera, 2010.
X
X dean [at] fourwalledcubicle [dot] com
X www.lufa-lib.org
*/
X
/*
X Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com)
X
X Permission to use, copy, modify, distribute, and sell this
X software and its documentation for any purpose is hereby granted
X without fee, provided that the above copyright notice appear in
X all copies and that both that the copyright notice and this
X permission notice and warranty disclaimer appear in supporting
X documentation, and that the name of the author not be used in
X advertising or publicity pertaining to distribution of the
X software without specific, written prior permission.
X
X The author disclaim all warranties with regard to this
X software, including all implied warranties of merchantability
X and fitness. In no event shall the author be liable for any
X special, indirect or consequential damages or any damages
X whatsoever resulting from loss of use, data or profits, whether
X in an action of contract, negligence or other tortious action,
X arising out of or in connection with the use or performance of
X this software.
*/
X
/** \file
X *
X * Header file for AudioOutput.c.
X */
X
#ifndef _AUDIO_OUTPUT_H_
#define _AUDIO_OUTPUT_H_
X
X /* Includes: */
X #include <avr/io.h>
X #include <avr/wdt.h>
X #include <avr/power.h>
X #include <avr/interrupt.h>
X #include <stdbool.h>
X #include <string.h>
X
X #include "Descriptors.h"
X
X #include <LUFA/Version.h>
// #include <LUFA/Drivers/Board/LEDs.h>
// #include <LUFA/Drivers/Board/Joystick.h>
// #include <LUFA/Drivers/Board/Buttons.h>
X #include <LUFA/Drivers/USB/USB.h>
X
X /* Macros: */
X /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
X #define LEDMASK_USB_NOTREADY LEDS_LED1
X
X /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */
X #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)
X
X /** LED mask for the library LED driver, to indicate that the USB interface is ready. */
X #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)
X
X /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */
X #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)
X
X /* Function Prototypes: */
X void SetupHardware(void);
X void CheckJoystickMovement(void);
X
X void EVENT_USB_Device_Connect(void);
X void EVENT_USB_Device_Disconnect(void);
X void EVENT_USB_Device_ConfigurationChanged(void);
X void EVENT_USB_Device_ControlRequest(void);
X
#endif
X
SHAR_EOF
(set 20 11 01 12 14 58 21 'rx/MIDI.h'
eval "${shar_touch}") && \
chmod 0644 'rx/MIDI.h'
if test $? -ne 0
then ${echo} "restore of rx/MIDI.h failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'rx/MIDI.h': 'MD5 check failed'
) << \SHAR_EOF
a26b0735afb61c161cd530136b23870e rx/MIDI.h
SHAR_EOF
else
test `LC_ALL=C wc -c < 'rx/MIDI.h'` -ne 2579 && \
${echo} "restoration warning: size of 'rx/MIDI.h' is not 2579"
fi
fi
# ============= rx/AudioInput.c ==============
if test -f 'rx/AudioInput.c' && test "$first_param" != -c; then
${echo} "x - SKIPPING rx/AudioInput.c (file already exists)"
else
${echo} "x - extracting rx/AudioInput.c (text)"
sed 's/^X//' << 'SHAR_EOF' > 'rx/AudioInput.c' &&
/*
X This file implements the receiver part of the wireless guitar system
X written by Wojciech M. Zabolotny ( wzab<at>ise.pw.edu.pl )
X Copyright (C) Wojciech Zabolotny, 2011
X Please treat my modifications as PUBLIC DOMAIN, however if you
X use them, please mention it in documentation of your software
X and/or device (this is a suggestion, not the obligation).
X
X I do not provide any warranty on my modifications!
X You may use it only on your own risk!
X
X Please note, that the below code was based on the AudioInput.c
X and MIDI.c file written by Dean Camera, with licence terms described below.
*/
/*
X LUFA Library
X Copyright (C) Dean Camera, 2010.
X
X dean [at] fourwalledcubicle [dot] com
X www.lufa-lib.org
*/
X
/*
X Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com)
X
X Permission to use, copy, modify, distribute, and sell this
X software and its documentation for any purpose is hereby granted
X without fee, provided that the above copyright notice appear in
X all copies and that both that the copyright notice and this
X permission notice and warranty disclaimer appear in supporting
X documentation, and that the name of the author not be used in
X advertising or publicity pertaining to distribution of the
X software without specific, written prior permission.
X
X The author disclaim all warranties with regard to this
X software, including all implied warranties of merchantability
X and fitness. In no event shall the author be liable for any
X special, indirect or consequential damages or any damages
X whatsoever resulting from loss of use, data or profits, whether
X in an action of contract, negligence or other tortious action,
X arising out of or in connection with the use or performance of
X this software.
*/
X
/** \file
X *
X * Main source file for the AudioInput demo. This file contains the main tasks of
X * the demo and is responsible for the initial application hardware configuration.
X */
X
#include "AudioInput.h"
#include "rfm70.h"
/** LUFA Audio Class driver interface configuration and state information. This structure is
X * passed to all Audio Class driver functions, so that multiple instances of the same class
X * within a device can be differentiated from one another.
X */
USB_ClassInfo_Audio_Device_t Microphone_Audio_Interface =
X {
X .Config =
X {
X .StreamingInterfaceNumber = 1,
X
X .DataINEndpointNumber = AUDIO_STREAM_EPNUM,
X .DataINEndpointSize = AUDIO_STREAM_EPSIZE,
X },
X };
X
//Pasted by WZab section
#include "MIDI.h"
X
/** LUFA MIDI Class driver interface configuration and state information. This structure is
X * passed to all MIDI Class driver functions, so that multiple instances of the same class
X * within a device can be differentiated from one another.
X */
USB_ClassInfo_MIDI_Device_t Keyboard_MIDI_Interface =
X {
X .Config =
X {
X .StreamingInterfaceNumber = 2,
X
X .DataINEndpointNumber = MIDI_STREAM_IN_EPNUM,
X .DataINEndpointSize = MIDI_STREAM_EPSIZE,
X .DataINEndpointDoubleBank = false,
X
X .DataOUTEndpointNumber = MIDI_STREAM_OUT_EPNUM,
X .DataOUTEndpointSize = MIDI_STREAM_EPSIZE,
X .DataOUTEndpointDoubleBank = false,
X },
X };
// End of pasted by WZab section
void T4_Init(void);
X
#define PKT_TIMEOUT 10
volatile uint8_t timer_count=0;
// Timer routines - needed automated detection of lost connection
// (e.g. due to channel change in the transmitter)
ISR(TIMER1_COMPA_vect, ISR_BLOCK)
{
X if(timer_count) timer_count--;
}
X
static inline void start_timer(int16_t val)
{
X OCR1A = val;
X TCCR1A = 0;
X TCCR1B = (0<<WGM13) | (1 << WGM12) | (1 << CS10);
X TIMSK1 = (1<<OCIE1A);
}
X
static inline void set_timer(int16_t val)
{
X cli();
X timer_count = val;
X sei();
}
X
#define PORT_OVR PORTF
#define PIN_NR_OVR 0
#define DDR_OVR DDRF
X
#define PORT_PKTLST PORTF
#define PIN_NR_PKTLST 1
#define DDR_PKTLST DDRF
X
#define PORT_PKTRCV PORTD
#define PIN_NR_PKTRCV 1
#define DDR_PKTRCV DDRD
X
#define PORT_BEEPER PORTD
#define PIN_NR_BEEPER 0
#define DDR_BEEPER DDRD
X
volatile uint8_t overrun_count=0;
volatile uint8_t packet_lost_count=0;
volatile uint8_t packet_rcvd_count=0;
// Timer routines - needed for servicing of LEDS signaling
// operation of the link
ISR(TIMER3_COMPA_vect, ISR_BLOCK)
{
X if(overrun_count) {
X overrun_count--;
X if(overrun_count==0) PORT_OVR &= ~(1<<PIN_NR_OVR); //Turn off the overrun diode
X }
X if(packet_lost_count) {
X packet_lost_count--;
X if(packet_lost_count==0) PORT_PKTLST &= ~(1<<PIN_NR_PKTLST); //Turn off the packet lost diode
X }
X if(packet_rcvd_count) {
X packet_rcvd_count--;
X if(packet_rcvd_count==0) PORT_PKTRCV &= ~(1<<PIN_NR_PKTRCV); //Turn off the packet lost diode
X }
}
X
static inline void start_timer3(int16_t val)
{
X OCR3A = val;
X TCCR3A = 0;
X TCCR3B = (0<<WGM33) | (1 << WGM32) | (1 << CS30);
X TIMSK3 = (1<<OCIE3A);
}
X
static inline void set_timer3(int16_t val)
{
X cli();
X timer_count = val;
X sei();
}
X
void beep(uint8_t msg)
{
X uint8_t mask;
X DDR_BEEPER |= (1<<PIN_NR_BEEPER);
X {
X mask=0x80;
X while(mask) {
X if(mask & msg)
X PORT_BEEPER |= (1<<PIN_NR_BEEPER);
X else
X PORT_BEEPER &= ~(1<<PIN_NR_BEEPER);
X _delay_ms(200);
X mask >>= 1;
X }
X PORT_BEEPER &= ~(1<<PIN_NR_BEEPER);
X _delay_ms(400);
X }
}
X
void show_error(uint8_t msg)
{
X uint8_t mask;
X DDR_BEEPER |= (1<<PIN_NR_BEEPER);
X while(1) {
X mask=0x80;
X while(mask) {
X if(mask & msg)
X PORT_BEEPER |= (1<<PIN_NR_BEEPER);
X else
X PORT_BEEPER &= ~(1<<PIN_NR_BEEPER);
X _delay_ms(200);
X mask >>= 1;
X }
X PORT_BEEPER &= ~(1<<PIN_NR_BEEPER);
X _delay_ms(400);
X }
}
X
#include "abuf.h"
#include "byte_select.h"
X
volatile uint32_t abuf[ABUF_LEN];
volatile uint8_t abuf_wptr = 0;
volatile uint8_t abuf_rptr = 0;
volatile uint8_t abuf_overrun = 0;
X
static inline bool abuf_is_empty(void)
{
X if (abuf_rptr == abuf_wptr) return true;
X return false;
}
X
static inline void abuf_put(uint32_t smp)
{
X uint8_t new_wptr = (abuf_wptr+1) & (ABUF_LEN-1);
X if(new_wptr == abuf_rptr) {
X overrun_count = 200;
X PORT_OVR |= (1<<PIN_NR_OVR);
X return;
X }
X abuf[abuf_wptr] = smp;
X abuf_wptr = new_wptr;
}
X
static inline uint32_t abuf_get(void)
{
X uint32_t res = abuf[abuf_rptr];
X cli();
X abuf_rptr = (abuf_rptr+1) & (ABUF_LEN-1);
X sei();
X return res; //(res + res);
}
X
uint8_t rf_channel = 0;
X
volatile uint8_t switches = 0;
uint8_t oldswitches = 0;
#define NR_OF_ADC_CHANS 4
volatile uint8_t adc_val[NR_OF_ADC_CHANS] = {0,0,0,0};
int8_t old_adc_val[NR_OF_ADC_CHANS] = {0,0,0,0};
X
ISR(INT0_vect, ISR_BLOCK)
{
X uint8_t val;
X static uint8_t old_pkt_nr =0;
X //Receiver's interrupt
X //Mark reception of the packet
X timer_count = PKT_TIMEOUT;
X //Disable the INT0 interrupt
X EIMSK &= ~(1<<INT0);
X EIFR = (1<<INTF0);
X PORT_PKTRCV |= (1<<PIN_NR_PKTRCV) ; //Show that packet arrived
X packet_rcvd_count = 100;
X sei(); //Enable interrupts
X while(1) {
X uint8_t i, pkt_nr;
X union{
X uint32_t i;
X uint8_t b[4];
X } smp;
X //The whole payload is received, cancel the interrupt
X write_reg(0x7,0x40);
X if((read_reg(0x17) & 0x01) == 1) {
X break;
X }
X set_cs(0);
X SPI_Transfer(0x61);
X pkt_nr=SPI_Transfer(0x00); //read packet number
X // Check ifany packet is lost and signal it
X if((pkt_nr-old_pkt_nr) != 1) {
X packet_lost_count = 100;
X PORT_PKTLST |= (1<<PIN_NR_PKTLST);
X }
X old_pkt_nr = pkt_nr;
X // Copy the data!
X for(i=0;i<10;i++) {
X smp.b[0]= SPI_Transfer(0x00);
X smp.b[1]= SPI_Transfer(0x00);
X smp.b[2]= SPI_Transfer(0x00);
X abuf_put(smp.i);
X }
X i = SPI_Transfer(0x00);
X switch (pkt_nr & 0x07) {
X case 0x01:
X switches = i;
X break;
X case 0x02:
X adc_val[0] = i;
X break;
X case 0x03:
X adc_val[1] = i;
X break;
X case 0x04:
X adc_val[2] = i;
X break;
X case 0x05:
X adc_val[3] = i;
X break;
X }
X set_cs(1);
X }
X cli(); // Avoid nesting of the interrupt!
X EIMSK |= (1<<INT0);
}
X
static inline void WZab_Device_WriteSample24(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo,
X uint32_t Sample) ATTR_NON_NULL_PTR_ARG(1) ATTR_ALWAYS_INLINE;
X
X static inline void WZab_Device_WriteSample24(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo,
X uint32_t Sample)
{
X Endpoint_Write_Byte(uint32_b0(Sample));
X Endpoint_Write_Byte(uint32_b1(Sample));
X Endpoint_Write_Byte(uint32_b2(Sample));
X
X if (Endpoint_BytesInEndpoint() == AudioInterfaceInfo->Config.DataINEndpointSize)
X Endpoint_ClearIN();
}
X
/** Main program entry point. This routine contains the overall program flow, including initial
X * setup of all components and the main program loop.
X */
int main(void)
{
X uint8_t rfm_state = 0;
X uint16_t sample_nr = 0;
X SetupHardware();
X
X //LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
X sei();
X set_timer(PKT_TIMEOUT);
X start_timer(3199); //400us timer
X start_timer3(31999); //2ms timer for overrun detection
X for (;;)
X {
X // Main loop
X {
X //Highest priority - receive audio samples and pass them to the isochronous endpoint
X uint8_t PrevEndpoint = Endpoint_GetCurrentEndpoint();
X /* Check if the sample reload timer period has elapsed, and that the USB bus is ready for a new sample */
X if ((abuf_is_empty()==false) && Audio_Device_IsReadyForNextSample(&Microphone_Audio_Interface))
X {
X uint32_t AudioSample;
X
X /* Only generate audio if the board button is being pressed */
X //AudioSample = (Buttons_GetStatus() & BUTTONS_BUTTON1) ? CurrentWaveValue : 0;
X AudioSample = abuf_get();
X
X WZab_Device_WriteSample24(&Microphone_Audio_Interface, AudioSample);
X }
X
X Endpoint_SelectEndpoint(PrevEndpoint);
X }
X //check if connection is working
X if(timer_count==0) {
X //No packet received for long time. Probably someone has changed the channel
X //in the transmitter
X //Maximum search time: 80 channels * 4ms/channel = 320ms! (quite acceptable)
X set_ce(0);
X cli(); //Avoid collision with the SPI access in ISRs
X if((++rf_channel) == 83) rf_channel = 0; //Change channel, don't use channels above 83!
X set_channel(rf_channel);
X set_timer(PKT_TIMEOUT);
X sei();
X set_ce(1);
X }
X //Process MIDI every 1000 samples!
X if((++sample_nr)==1000)
X {
X uint8_t tmp1, tmp2, i;
X sample_nr = 0;
X //Check switches
X tmp1 = switches;
X tmp2 = oldswitches ^ switches;
X if(tmp2) {
X // Something has changed!
X oldswitches = tmp1;
X for(i=0;i<4;i++) {
X if (tmp2 & 1) {
X // Send the new value of the i-th switch
X MIDI_EventPacket_t MIDIEvent = (MIDI_EventPacket_t)
X {
X .CableNumber = 0,
X .Command = 0x0b,
X
X .Data1 = 0xb0,
X .Data2 = 0x50+i,
X .Data3 = (tmp1 & 1) ? 0x7f : 0x00,
X };
X MIDI_Device_SendEventPacket(&Keyboard_MIDI_Interface, &MIDIEvent);
X
X }
X tmp2 >>= 1;
X tmp1 >>= 1;
X }
X }
X //Check analog controllers
X for(i=0;i<NR_OF_ADC_CHANS;i++) {
X tmp1 = adc_val[i];
X if(tmp1 != old_adc_val[i]) {
X old_adc_val[i]=tmp1;
X MIDI_EventPacket_t MIDIEvent = (MIDI_EventPacket_t)
X {
X .CableNumber = 0,
X .Command = 0x0b,
X
X .Data1 = 0xb0,
X .Data2 = 0x10+i,
X .Data3 = tmp1,
X };
X MIDI_Device_SendEventPacket(&Keyboard_MIDI_Interface, &MIDIEvent);
X }
X }
X MIDI_Device_Flush(&Keyboard_MIDI_Interface);
X MIDI_Device_USBTask(&Keyboard_MIDI_Interface);
X }
X Audio_Device_USBTask(&Microphone_Audio_Interface);
X USB_USBTask();
X }
}
X
/** Configures the board hardware and chip peripherals for the demo's functionality. */
void SetupHardware(void)
{
X /* Disable watchdog if enabled by bootloader/fuses */
X MCUSR &= ~(1 << WDRF);
X wdt_disable();
X
X /* Disable clock division */
X /* cli();
X CLKPR=0x80;
X CLKPR=0x00;
X sei() */;
X clock_prescale_set(clock_div_1);
X
X /* Hardware Initialization */
X //LEDs_Init();
X //Buttons_Init();
X //ADC_Init(ADC_FREE_RUNNING | ADC_PRESCALE_32);
X //ADC_SetupChannel(MIC_IN_ADC_CHANNEL);
X rfm70_hw_setup();
X SPI_MasterInit();
X rfm70_init();
X USB_Init();
X DDR_PKTRCV |= (1<<PIN_NR_PKTRCV);
X PORT_PKTRCV &= ~(1<<PIN_NR_PKTRCV);
X // Prepare the overrun and packet lost detection LEDs
X DDR_OVR |= (1<<PIN_NR_OVR);
X PORT_OVR &= ~(1<<PIN_NR_OVR);
X DDR_PKTLST |= (1<<PIN_NR_PKTLST);
X PORT_PKTLST &= ~(1<<PIN_NR_PKTLST);
}
X
static PROGMEM uint8_t cmd_flush_rx[]={0xe2,0x00};
static PROGMEM uint8_t cmd_flush_tx[]={0xe1,0x00};
X
/** Event handler for the library USB Connection event. */
void EVENT_USB_Device_Connect(void)
{
X //LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
X EIFR = (1<<INTF0);
X EIMSK |= (1<<INT0); //Turn on the receiver's interrupts
X set_ce(0);
X _delay_us(10);
X write_pcmd(cmd_flush_tx,sizeof(cmd_flush_tx));
X write_pcmd(cmd_flush_rx,sizeof(cmd_flush_rx));
X write_reg(7,0x70); //cancel all possible interrupts
X switch_to_rx_mode();
X return;
X
}
X
/** Event handler for the library USB Disconnection event. */
void EVENT_USB_Device_Disconnect(void)
{
X EIMSK &= ~(1<<INT0);
X set_ce(0);
X //LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
}
X
/** Event handler for the library USB Configuration Changed event. */
void EVENT_USB_Device_ConfigurationChanged(void)
{
X bool ConfigSuccess = true;
X
X ConfigSuccess &= Audio_Device_ConfigureEndpoints(&Microphone_Audio_Interface);
X ConfigSuccess &= MIDI_Device_ConfigureEndpoints(&Keyboard_MIDI_Interface);
X //LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR);
}
X
/** Event handler for the library USB Control Request reception event. */
void EVENT_USB_Device_ControlRequest(void)
{
X Audio_Device_ProcessControlRequest(&Microphone_Audio_Interface);
X MIDI_Device_ProcessControlRequest(&Keyboard_MIDI_Interface);
}
X
SHAR_EOF
(set 20 11 01 15 14 49 38 'rx/AudioInput.c'
eval "${shar_touch}") && \
chmod 0644 'rx/AudioInput.c'
if test $? -ne 0
then ${echo} "restore of rx/AudioInput.c failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'rx/AudioInput.c': 'MD5 check failed'
) << \SHAR_EOF
ceaaff6d24905df07fe679b37831f7f0 rx/AudioInput.c
SHAR_EOF
else
test `LC_ALL=C wc -c < 'rx/AudioInput.c'` -ne 13768 && \
${echo} "restoration warning: size of 'rx/AudioInput.c' is not 13768"
fi
fi
# ============= rx/AudioInput.h ==============
if test -f 'rx/AudioInput.h' && test "$first_param" != -c; then
${echo} "x - SKIPPING rx/AudioInput.h (file already exists)"
else
${echo} "x - extracting rx/AudioInput.h (text)"
sed 's/^X//' << 'SHAR_EOF' > 'rx/AudioInput.h' &&
/*
X LUFA Library
X Copyright (C) Dean Camera, 2010.
X
X dean [at] fourwalledcubicle [dot] com
X www.lufa-lib.org
*/
X
/*
X Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com)
X
X Permission to use, copy, modify, distribute, and sell this
X software and its documentation for any purpose is hereby granted
X without fee, provided that the above copyright notice appear in
X all copies and that both that the copyright notice and this
X permission notice and warranty disclaimer appear in supporting
X documentation, and that the name of the author not be used in
X advertising or publicity pertaining to distribution of the
X software without specific, written prior permission.
X
X The author disclaim all warranties with regard to this
X software, including all implied warranties of merchantability
X and fitness. In no event shall the author be liable for any
X special, indirect or consequential damages or any damages
X whatsoever resulting from loss of use, data or profits, whether
X in an action of contract, negligence or other tortious action,
X arising out of or in connection with the use or performance of
X this software.
*/
X
/** \file
X *
X * Header file for AudioInput.c.
X */
X
#ifndef _AUDIO_INPUT_H_
#define _AUDIO_INPUT_H_
X
X /* Includes: */
X #include <avr/io.h>
X #include <avr/wdt.h>
X #include <avr/power.h>
X #include <avr/interrupt.h>
X
X #include <LUFA/Version.h>
// #include <LUFA/Drivers/Board/LEDs.h>
// #include <LUFA/Drivers/Board/Buttons.h>
// #include <LUFA/Drivers/Peripheral/ADC.h>
X #include <LUFA/Drivers/USB/USB.h>
X
X #include "Descriptors.h"
X
X /* Macros: */
X /** ADC channel number for the microphone input. */
X #define MIC_IN_ADC_CHANNEL 2
X
X /** ADC channel MUX mask for the microphone input. */
X #define MIC_IN_ADC_MUX_MASK ADC_CHANNEL2
X
X /** Maximum ADC sample value for the microphone input. */
X #define SAMPLE_MAX_RANGE 0xFFFF
X
X /** Maximum ADC range for the microphone input. */
X #define ADC_MAX_RANGE 0x3FF
X
X /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
X #define LEDMASK_USB_NOTREADY LEDS_LED1
X
X /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */
X #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)
X
X /** LED mask for the library LED driver, to indicate that the USB interface is ready. */
X #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)
X
X /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */
X #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)
X
X /* Function Prototypes: */
X void SetupHardware(void);
X
X void EVENT_USB_Device_Connect(void);
X void EVENT_USB_Device_Disconnect(void);
X void EVENT_USB_Device_ConfigurationChanged(void);
X void EVENT_USB_Device_ControlRequest(void);
X
#endif
X
SHAR_EOF
(set 20 11 01 07 16 38 26 'rx/AudioInput.h'
eval "${shar_touch}") && \
chmod 0644 'rx/AudioInput.h'
if test $? -ne 0
then ${echo} "restore of rx/AudioInput.h failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'rx/AudioInput.h': 'MD5 check failed'
) << \SHAR_EOF
7396bd93b798e94eb4f097807ceba235 rx/AudioInput.h
SHAR_EOF
else
test `LC_ALL=C wc -c < 'rx/AudioInput.h'` -ne 2894 && \
${echo} "restoration warning: size of 'rx/AudioInput.h' is not 2894"
fi
fi
# ============= rx/spi_atmega32u4.h ==============
if test -f 'rx/spi_atmega32u4.h' && test "$first_param" != -c; then
${echo} "x - SKIPPING rx/spi_atmega32u4.h (file already exists)"
else
${echo} "x - extracting rx/spi_atmega32u4.h (text)"
sed 's/^X//' << 'SHAR_EOF' > 'rx/spi_atmega32u4.h' &&
/*
X The code below is published as PUBLIC DOMAIN as Wojciech M. Zabolotny
X ( wzab<at>ise.pw.edu.pl ) 2011.01.11
X No warranty of any kind is provided! Use at your own risk!
*/
X
static inline void SPI_MasterInit(void)
{
X /* Set SS , MOSI and SCK output, all others input */
X DDRB |= (1<<0)|(1<<2)|(1<<1);
X /* Enable SPI, Master, set clock rate fck/2 */
X SPSR = (1<<SPI2X);
X SPCR = (1<<SPE)|(1<<MSTR)|(0<<SPR0);
}
X
static inline uint8_t SPI_Transfer(uint8_t cData)
{
X /* Start transmission */
X SPDR = cData;
X /* Wait for transmission complete */
X while(!(SPSR & (1<<SPIF)))
X {};
X return SPDR;
}
X
X
SHAR_EOF
(set 20 11 01 15 14 47 56 'rx/spi_atmega32u4.h'
eval "${shar_touch}") && \
chmod 0644 'rx/spi_atmega32u4.h'
if test $? -ne 0
then ${echo} "restore of rx/spi_atmega32u4.h failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'rx/spi_atmega32u4.h': 'MD5 check failed'
) << \SHAR_EOF
67472161992164f183c349b7fea4b4d9 rx/spi_atmega32u4.h
SHAR_EOF
else
test `LC_ALL=C wc -c < 'rx/spi_atmega32u4.h'` -ne 611 && \
${echo} "restoration warning: size of 'rx/spi_atmega32u4.h' is not 611"
fi
fi
# ============= rx/Descriptors.c ==============
if test -f 'rx/Descriptors.c' && test "$first_param" != -c; then
${echo} "x - SKIPPING rx/Descriptors.c (file already exists)"
else
${echo} "x - extracting rx/Descriptors.c (text)"
sed 's/^X//' << 'SHAR_EOF' > 'rx/Descriptors.c' &&
/*
X This file implements the receiver part of the wireless guitar system
X written by Wojciech M. Zabolotny ( wzab<at>ise.pw.edu.pl )
X Copyright (C) Wojciech Zabolotny, 2011
X Please treat my modifications as PUBLIC DOMAIN, however if you
X use them, please mention it in documentation of your software
X and/or device (this is a suggestion, not the obligation).
X
X I do not provide any warranty on my modifications!
X You may use it only on your own risk!
X
X Please note, that the below code was based on the Descriptors.c
X file written by Dean Camera, with licence terms described below.
*/
X
/*
X LUFA Library
X Copyright (C) Dean Camera, 2010.
X
X dean [at] fourwalledcubicle [dot] com
X www.lufa-lib.org
*/
X
/*
X Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com)
X
X Permission to use, copy, modify, distribute, and sell this
X software and its documentation for any purpose is hereby granted
X without fee, provided that the above copyright notice appear in
X all copies and that both that the copyright notice and this
X permission notice and warranty disclaimer appear in supporting
X documentation, and that the name of the author not be used in
X advertising or publicity pertaining to distribution of the
X software without specific, written prior permission.
X
X The author disclaim all warranties with regard to this
X software, including all implied warranties of merchantability
X and fitness. In no event shall the author be liable for any
X special, indirect or consequential damages or any damages
X whatsoever resulting from loss of use, data or profits, whether
X in an action of contract, negligence or other tortious action,
X arising out of or in connection with the use or performance of
X this software.
*/
X
/** \file
X *
X * USB Device Descriptors, for library use when in USB device mode. Descriptors are special
X * computer-readable structures which the host requests upon device enumeration, to determine
X * the device's capabilities and functions.
X */
X
#include "Descriptors.h"
X
/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall
X * device characteristics, including the supported USB version, control endpoint size and the
X * number of device configurations. The descriptor is read out by the USB host when the enumeration
X * process begins.
X */
USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
X {
X .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
X
X .USBSpecification = VERSION_BCD(02.00),
X .Class = USB_CSCP_NoDeviceClass,
X .SubClass = USB_CSCP_NoDeviceSubclass,
X .Protocol = USB_CSCP_NoDeviceProtocol,
X
X .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,
X
X .VendorID = 0x03EB,
X .ProductID = 0x2047,
X .ReleaseNumber = VERSION_BCD(00.01),
X
X .ManufacturerStrIndex = 0x01,
X .ProductStrIndex = 0x02,
X .SerialNumStrIndex = NO_DESCRIPTOR,
X
X .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
X };
X
/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage
X * of the device in one of its supported configurations, including information about any device interfaces
X * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting
X * a configuration so that the host may correctly communicate with the USB device.
X */
USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
X {
X .Config =
X {
X .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
X
X .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),
X .TotalInterfaces = 3,
X
X .ConfigurationNumber = 1,
X .ConfigurationStrIndex = NO_DESCRIPTOR,
X
X .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),
X
X .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)
X },
X
X .Audio_ControlInterface =
X {
X .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
X
X .InterfaceNumber = 0,
X .AlternateSetting = 0,
X
X .TotalEndpoints = 0,
X
X .Class = AUDIO_CSCP_AudioClass,
X .SubClass = AUDIO_CSCP_ControlSubclass,
X .Protocol = AUDIO_CSCP_ControlProtocol,
X
X .InterfaceStrIndex = NO_DESCRIPTOR
X },
X
X .Audio_ControlInterface_SPC =
X {
X .Header = {.Size = sizeof(USB_Audio_Descriptor_Interface_AC_t), .Type = DTYPE_CSInterface},
X .Subtype = AUDIO_DSUBTYPE_CSInterface_Header,
X
X .ACSpecification = VERSION_BCD(01.00),
X .TotalLength = (sizeof(USB_Audio_Descriptor_Interface_AC_t) +
X sizeof(USB_Audio_Descriptor_InputTerminal_t) +
X sizeof(USB_Audio_Descriptor_OutputTerminal_t)),
X
X .InCollection = 1,
X .InterfaceNumber = 1,
X },
X
X .Audio_InputTerminal =
X {
X .Header = {.Size = sizeof(USB_Audio_Descriptor_InputTerminal_t), .Type = DTYPE_CSInterface},
X .Subtype = AUDIO_DSUBTYPE_CSInterface_InputTerminal,
X
X .TerminalID = 0x01,
X .TerminalType = AUDIO_TERMINAL_IN_MIC,
X .AssociatedOutputTerminal = 0x00,
X
X .TotalChannels = 1,
X .ChannelConfig = 0,
X
X .ChannelStrIndex = NO_DESCRIPTOR,
X .TerminalStrIndex = NO_DESCRIPTOR
X },
X
X .Audio_OutputTerminal =
X {
X .Header = {.Size = sizeof(USB_Audio_Descriptor_OutputTerminal_t), .Type = DTYPE_CSInterface},
X .Subtype = AUDIO_DSUBTYPE_CSInterface_OutputTerminal,
X
X .TerminalID = 0x02,
X .TerminalType = AUDIO_TERMINAL_STREAMING,
X .AssociatedInputTerminal = 0x00,
X
X .SourceID = 0x01,
X
X .TerminalStrIndex = NO_DESCRIPTOR
X },
X
X .Audio_StreamInterface_Alt0 =
X {
X .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
X
X .InterfaceNumber = 1,
X .AlternateSetting = 0,
X
X .TotalEndpoints = 0,
X
X .Class = AUDIO_CSCP_AudioClass,
X .SubClass = AUDIO_CSCP_AudioStreamingSubclass,
X .Protocol = AUDIO_CSCP_StreamingProtocol,
X
X .InterfaceStrIndex = NO_DESCRIPTOR
X },
X
X .Audio_StreamInterface_Alt1 =
X {
X .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
X
X .InterfaceNumber = 1,
X .AlternateSetting = 1,
X
X .TotalEndpoints = 1,
X
X .Class = AUDIO_CSCP_AudioClass,
X .SubClass = AUDIO_CSCP_AudioStreamingSubclass,
X .Protocol = AUDIO_CSCP_StreamingProtocol,
X
X .InterfaceStrIndex = NO_DESCRIPTOR
X },
X
X .Audio_StreamInterface_SPC =
X {
X .Header = {.Size = sizeof(USB_Audio_Descriptor_Interface_AS_t), .Type = DTYPE_CSInterface},
X .Subtype = AUDIO_DSUBTYPE_CSInterface_General,
X
X .TerminalLink = 0x02,
X
X .FrameDelay = 1,
X .AudioFormat = 0x0001
X },
X
X .Audio_AudioFormat =
X {
X .Header = {.Size = sizeof(USB_Audio_Descriptor_Format_t), .Type = DTYPE_CSInterface},
X .Subtype = AUDIO_DSUBTYPE_CSInterface_FormatType,
X
X .FormatType = 0x01,
X .Channels = 0x01,
X
X .SubFrameSize = 0x03,
X .BitResolution = 24,
X .SampleFrequencyType = AUDIO_TOTAL_SAMPLE_RATES,
X
X .SampleFrequencies = {AUDIO_SAMPLE_FREQ(AUDIO_SAMPLE_FREQUENCY)}
X },
X
X .Audio_StreamEndpoint =
X {
X .Endpoint =
X {
X .Header = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint},
X
X .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | AUDIO_STREAM_EPNUM),
X // .Attributes = (EP_TYPE_ISOCHRONOUS | ENDPOINT_ATTR_SYNC | ENDPOINT_USAGE_DATA),
X .Attributes = (EP_TYPE_ISOCHRONOUS | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
X .EndpointSize = AUDIO_STREAM_EPSIZE,
X .PollingIntervalMS = 0x01
X },
X
X .Refresh = 0,
X .SyncEndpointNumber = 0
X },
X
X .Audio_StreamEndpoint_SPC =
X {
X .Header = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Spc_t), .Type = DTYPE_CSEndpoint},
X .Subtype = AUDIO_DSUBTYPE_CSEndpoint_General,
X
X .Attributes = AUDIO_EP_ACCEPTS_SMALL_PACKETS,
X
X .LockDelayUnits = 0x00,
X .LockDelay = 0x0000
X },
X // Start of section pasted by WZab
X .MIDI_Audio_StreamInterface =
X {
X .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
X
X .InterfaceNumber = 2,
X .AlternateSetting = 0,
X
X .TotalEndpoints = 2,
X
X .Class = AUDIO_CSCP_AudioClass,
X .SubClass = AUDIO_CSCP_MIDIStreamingSubclass,
X .Protocol = AUDIO_CSCP_StreamingProtocol,
X
X .InterfaceStrIndex = NO_DESCRIPTOR
X },
X
X .MIDI_Audio_StreamInterface_SPC =
X {
X .Header = {.Size = sizeof(USB_MIDI_Descriptor_AudioInterface_AS_t), .Type = DTYPE_CSInterface},
X .Subtype = AUDIO_DSUBTYPE_CSInterface_General,
X
X .AudioSpecification = VERSION_BCD(01.00),
X
X .TotalLength = (sizeof(USB_Descriptor_Configuration_t) -
X offsetof(USB_Descriptor_Configuration_t, Audio_StreamInterface_SPC))
X },
X
X .MIDI_In_Jack_Emb =
X {
X .Header = {.Size = sizeof(USB_MIDI_Descriptor_InputJack_t), .Type = DTYPE_CSInterface},
X .Subtype = AUDIO_DSUBTYPE_CSInterface_InputTerminal,
X
X .JackType = MIDI_JACKTYPE_Embedded,
X .JackID = 0x01,
X
X .JackStrIndex = NO_DESCRIPTOR
X },
X
X .MIDI_In_Jack_Ext =
X {
X .Header = {.Size = sizeof(USB_MIDI_Descriptor_InputJack_t), .Type = DTYPE_CSInterface},
X .Subtype = AUDIO_DSUBTYPE_CSInterface_InputTerminal,
X
X .JackType = MIDI_JACKTYPE_External,
X .JackID = 0x02,
X
X .JackStrIndex = NO_DESCRIPTOR
X },
X
X .MIDI_Out_Jack_Emb =
X {
X .Header = {.Size = sizeof(USB_MIDI_Descriptor_OutputJack_t), .Type = DTYPE_CSInterface},
X .Subtype = AUDIO_DSUBTYPE_CSInterface_OutputTerminal,
X
X .JackType = MIDI_JACKTYPE_Embedded,
X .JackID = 0x03,
X
X .NumberOfPins = 1,
X .SourceJackID = {0x02},
X .SourcePinID = {0x01},
X
X .JackStrIndex = NO_DESCRIPTOR
X },
X
X .MIDI_Out_Jack_Ext =
X {
X .Header = {.Size = sizeof(USB_MIDI_Descriptor_OutputJack_t), .Type = DTYPE_CSInterface},
X .Subtype = AUDIO_DSUBTYPE_CSInterface_OutputTerminal,
X
X .JackType = MIDI_JACKTYPE_External,
X .JackID = 0x04,
X
X .NumberOfPins = 1,
X .SourceJackID = {0x01},
X .SourcePinID = {0x01},
X
X .JackStrIndex = NO_DESCRIPTOR
X },
X
X .MIDI_In_Jack_Endpoint =
X {
X .Endpoint =
X {
X .Header = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint},
X
X .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | MIDI_STREAM_OUT_EPNUM),
X .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
X .EndpointSize = MIDI_STREAM_EPSIZE,
X .PollingIntervalMS = 0x01
X },
X
X .Refresh = 0,
X .SyncEndpointNumber = 0
X },
X
X .MIDI_In_Jack_Endpoint_SPC =
X {
X .Header = {.Size = sizeof(USB_MIDI_Descriptor_Jack_Endpoint_t), .Type = DTYPE_CSEndpoint},
X .Subtype = AUDIO_DSUBTYPE_CSEndpoint_General,
X
X .TotalEmbeddedJacks = 0x01,
X .AssociatedJackID = {0x01}
X },
X
X .MIDI_Out_Jack_Endpoint =
X {
X .Endpoint =
X {
X .Header = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint},
X
X .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | MIDI_STREAM_IN_EPNUM),
X .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
X .EndpointSize = MIDI_STREAM_EPSIZE,
X .PollingIntervalMS = 0x01
X },
X
X .Refresh = 0,
X .SyncEndpointNumber = 0
X },
X
X .MIDI_Out_Jack_Endpoint_SPC =
X {
X .Header = {.Size = sizeof(USB_MIDI_Descriptor_Jack_Endpoint_t), .Type = DTYPE_CSEndpoint},
X .Subtype = AUDIO_DSUBTYPE_CSEndpoint_General,
X
X .TotalEmbeddedJacks = 0x01,
X .AssociatedJackID = {0x03}
X }
X // End of section pasted by WZab
X };
X
/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests
X * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate
X * via the language ID table available at USB.org what languages the device supports for its string descriptors.
X */
USB_Descriptor_String_t PROGMEM LanguageString =
X {
X .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},
X
X .UnicodeString = {LANGUAGE_ID_ENG}
X };
X
/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable
X * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
X * Descriptor.
X */
USB_Descriptor_String_t PROGMEM ManufacturerString =
X {
X .Header = {.Size = USB_STRING_LEN(4), .Type = DTYPE_String},
X
X .UnicodeString = L"WZab"
X };
X
/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,
X * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
X * Descriptor.
X */
USB_Descriptor_String_t PROGMEM ProductString =
X {
X .Header = {.Size = USB_STRING_LEN(17), .Type = DTYPE_String},
X
X .UnicodeString = L"MIDI + Audio Demo"
X };
X
/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"
X * documentation) by the application code so that the address and size of a requested descriptor can be given
X * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function
X * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the
X * USB host.
X */
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
X const uint8_t wIndex,
X const void** const DescriptorAddress)
{
X const uint8_t DescriptorType = (wValue >> 8);
X const uint8_t DescriptorNumber = (wValue & 0xFF);
X
X const void* Address = NULL;
X uint16_t Size = NO_DESCRIPTOR;
X
X switch (DescriptorType)
X {
X case DTYPE_Device:
X Address = &DeviceDescriptor;
X Size = sizeof(USB_Descriptor_Device_t);
X break;
X case DTYPE_Configuration:
X Address = &ConfigurationDescriptor;
X Size = sizeof(USB_Descriptor_Configuration_t);
X break;
X case DTYPE_String:
X switch (DescriptorNumber)
X {
X case 0x00:
X Address = &LanguageString;
X Size = pgm_read_byte(&LanguageString.Header.Size);
X break;
X case 0x01:
X Address = &ManufacturerString;
X Size = pgm_read_byte(&ManufacturerString.Header.Size);
X break;
X case 0x02:
X Address = &ProductString;
X Size = pgm_read_byte(&ProductString.Header.Size);
X break;
X }
X
X break;
X }
X
X *DescriptorAddress = Address;
X return Size;
}
X
SHAR_EOF
(set 20 11 01 15 14 48 34 'rx/Descriptors.c'
eval "${shar_touch}") && \
chmod 0644 'rx/Descriptors.c'
if test $? -ne 0
then ${echo} "restore of rx/Descriptors.c failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'rx/Descriptors.c': 'MD5 check failed'
) << \SHAR_EOF
c67e9aec1a8e14e72e7af7ad4f306493 rx/Descriptors.c
SHAR_EOF
else
test `LC_ALL=C wc -c < 'rx/Descriptors.c'` -ne 16376 && \
${echo} "restoration warning: size of 'rx/Descriptors.c' is not 16376"
fi
fi
# ============= rx/Descriptors.h ==============
if test -f 'rx/Descriptors.h' && test "$first_param" != -c; then
${echo} "x - SKIPPING rx/Descriptors.h (file already exists)"
else
${echo} "x - extracting rx/Descriptors.h (text)"
sed 's/^X//' << 'SHAR_EOF' > 'rx/Descriptors.h' &&
/*
X This file implements the receiver part of the wireless guitar system
X written by Wojciech M. Zabolotny ( wzab<at>ise.pw.edu.pl )
X Copyright (C) Wojciech Zabolotny, 2011
X Please treat my modifications as PUBLIC DOMAIN, however if you
X use them, please mention it in documentation of your software
X and/or device (this is a suggestion, not the obligation).
X
X I do not provide any warranty on my modifications!
X You may use it only on your own risk!
X
X Please note, that the below code was based on the Descriptors.h
X file written by Dean Camera, with licence terms described below.
*/
X
/*
X LUFA Library
X Copyright (C) Dean Camera, 2010.
X
X dean [at] fourwalledcubicle [dot] com
X www.lufa-lib.org
*/
X
/*
X Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com)
X
X Permission to use, copy, modify, distribute, and sell this
X software and its documentation for any purpose is hereby granted
X without fee, provided that the above copyright notice appear in
X all copies and that both that the copyright notice and this
X permission notice and warranty disclaimer appear in supporting
X documentation, and that the name of the author not be used in
X advertising or publicity pertaining to distribution of the
X software without specific, written prior permission.
X
X The author disclaim all warranties with regard to this
X software, including all implied warranties of merchantability
X and fitness. In no event shall the author be liable for any
X special, indirect or consequential damages or any damages
X whatsoever resulting from loss of use, data or profits, whether
X in an action of contract, negligence or other tortious action,
X arising out of or in connection with the use or performance of
X this software.
*/
X
/** \file
X *
X * Header file for Descriptors.c.
X */
X
#ifndef _DESCRIPTORS_H_
#define _DESCRIPTORS_H_
X
X /* Includes: */
X #include <LUFA/Drivers/USB/USB.h>
X
X #include <avr/pgmspace.h>
X
X /* Macros: */
X /** Endpoint number of the Audio isochronous streaming data endpoint. */
X #define AUDIO_STREAM_EPNUM 1
X
X /** Endpoint size in bytes of the Audio isochronous streaming data endpoint. The Windows audio stack requires
X * at least 192 bytes for correct output, thus the smaller 128 byte maximum endpoint size on some of the smaller
X * USB AVR models will result in unavoidable distorted output.
X */
// #define AUDIO_STREAM_EPSIZE ENDPOINT_MAX_SIZE(AUDIO_STREAM_EPNUM)
X #define AUDIO_STREAM_EPSIZE 252 // Must be multiple of 3
X
X /** Sample frequency of the data being transmitted through the streaming endpoint. */
X #define AUDIO_SAMPLE_FREQUENCY 48000
// #define AUDIO_SAMPLE_FREQUENCY 11025
X
// Macros pasted by WZab
X /* Macros: */
X /** Endpoint number of the MIDI streaming data IN endpoint, for device-to-host data transfers. */
X #define MIDI_STREAM_IN_EPNUM 3
X
X /** Endpoint number of the MIDI streaming data OUT endpoint, for host-to-device data transfers. */
X #define MIDI_STREAM_OUT_EPNUM 2
X
X /** Endpoint size in bytes of the Audio isochronous streaming data IN and OUT endpoints. */
X #define MIDI_STREAM_EPSIZE 64
X
// End of macros pasted by WZab
X /* Type Defines: */
X /** Type define for the device configuration descriptor structure. This must be defined in the
X * application code, as the configuration descriptor contains several sub-descriptors which
X * vary between devices, and which describe the device's usage to the host.
X */
X typedef struct
X {
X USB_Descriptor_Configuration_Header_t Config;
X USB_Descriptor_Interface_t Audio_ControlInterface;
X USB_Audio_Descriptor_Interface_AC_t Audio_ControlInterface_SPC;
X USB_Audio_Descriptor_InputTerminal_t Audio_InputTerminal;
X USB_Audio_Descriptor_OutputTerminal_t Audio_OutputTerminal;
X USB_Descriptor_Interface_t Audio_StreamInterface_Alt0;
X USB_Descriptor_Interface_t Audio_StreamInterface_Alt1;
X USB_Audio_Descriptor_Interface_AS_t Audio_StreamInterface_SPC;
X USB_Audio_Descriptor_Format_t Audio_AudioFormat;
X USB_Audio_Descriptor_StreamEndpoint_Std_t Audio_StreamEndpoint;
X USB_Audio_Descriptor_StreamEndpoint_Spc_t Audio_StreamEndpoint_SPC;
X // Start of pasted section WZab
X USB_Descriptor_Interface_t MIDI_Audio_StreamInterface;
X USB_MIDI_Descriptor_AudioInterface_AS_t MIDI_Audio_StreamInterface_SPC;
X USB_MIDI_Descriptor_InputJack_t MIDI_In_Jack_Emb;
X USB_MIDI_Descriptor_InputJack_t MIDI_In_Jack_Ext;
X USB_MIDI_Descriptor_OutputJack_t MIDI_Out_Jack_Emb;
X USB_MIDI_Descriptor_OutputJack_t MIDI_Out_Jack_Ext;
X USB_Audio_Descriptor_StreamEndpoint_Std_t MIDI_In_Jack_Endpoint;
X USB_MIDI_Descriptor_Jack_Endpoint_t MIDI_In_Jack_Endpoint_SPC;
X USB_Audio_Descriptor_StreamEndpoint_Std_t MIDI_Out_Jack_Endpoint;
X USB_MIDI_Descriptor_Jack_Endpoint_t MIDI_Out_Jack_Endpoint_SPC;
X // End of pasted section WZab
X } USB_Descriptor_Configuration_t;
X
X /* Function Prototypes: */
X uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
X const uint8_t wIndex,
X const void** const DescriptorAddress)
X ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
X
#endif
X
SHAR_EOF
(set 20 11 01 15 14 46 54 'rx/Descriptors.h'
eval "${shar_touch}") && \
chmod 0644 'rx/Descriptors.h'
if test $? -ne 0
then ${echo} "restore of rx/Descriptors.h failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'rx/Descriptors.h': 'MD5 check failed'
) << \SHAR_EOF
92bf1e6b8cf262128c42a63ea056ebbd rx/Descriptors.h
SHAR_EOF
else
test `LC_ALL=C wc -c < 'rx/Descriptors.h'` -ne 5407 && \
${echo} "restoration warning: size of 'rx/Descriptors.h' is not 5407"
fi
fi
# ============= rx/makefile ==============
if test -f 'rx/makefile' && test "$first_param" != -c; then
${echo} "x - SKIPPING rx/makefile (file already exists)"
else
${echo} "x - extracting rx/makefile (text)"
sed 's/^X//' << 'SHAR_EOF' > 'rx/makefile' &&
# Hey Emacs, this is a -*- makefile -*-
#----------------------------------------------------------------------------
# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
# >> Modified for use with the LUFA project. <<
#
# Released to the Public Domain
#
# Additional material for this makefile was written by:
# Peter Fleury
# Tim Henigan
# Colin O'Flynn
# Reiner Patommel
# Markus Pfaff
# Sander Pool
# Frederik Rouleau
# Carlos Lamas
# Dean Camera
# Opendous Inc.
# Denver Gingerich
#
#----------------------------------------------------------------------------
# On command line:
#
# make all = Make software.
#
# make clean = Clean out built project files.
#
# make coff = Convert ELF to AVR COFF.
#
# make extcoff = Convert ELF to AVR Extended COFF.
#
# make program = Download the hex file to the device, using avrdude.
# Please customize the avrdude settings below first!
#
# make dfu = Download the hex file to the device, using dfu-programmer (must
# have dfu-programmer installed).
#
# make flip = Download the hex file to the device, using Atmel FLIP (must
# have Atmel FLIP installed).
#
# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
# (must have dfu-programmer installed).
#
# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
# (must have Atmel FLIP installed).
#
# make doxygen = Generate DoxyGen documentation for the project (must have
# DoxyGen installed)
#
# make debug = Start either simulavr or avarice as specified for debugging,
# with avr-gdb or avr-insight as the front end for debugging.
#
# make filename.s = Just compile filename.c into the assembler code only.
#
# make filename.i = Create a preprocessed source file for use in submitting
# bug reports to the GCC project.
#
# To rebuild project do "make clean" then "make all".
#----------------------------------------------------------------------------
X
X
# MCU name
MCU = atmega32u4
X
X
# Target board (see library "Board Types" documentation, NONE for projects not requiring
# LUFA board drivers). If USER is selected, put custom board drivers in a directory called
# "Board" inside the application directory.
BOARD = NONE
X
X
# Processor frequency.
# This will define a symbol, F_CPU, in all source code files equal to the
# processor frequency in Hz. You can then use this symbol in your source code to
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
# automatically to create a 32-bit value in your source code.
#
# This will be an integer division of F_CLOCK below, as it is sourced by
# F_CLOCK after it has run through any CPU prescalers. Note that this value
# does not *change* the processor frequency - it should merely be updated to
# reflect the processor speed set externally so that the code can use accurate
# software delays.
F_CPU = 16000000
X
X
# Input clock frequency.
# This will define a symbol, F_CLOCK, in all source code files equal to the
# input clock frequency (before any prescaling is performed) in Hz. This value may
# differ from F_CPU if prescaling is used on the latter, and is required as the
# raw input clock is fed directly to the PLL sections of the AVR for high speed
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
# at the end, this will be done automatically to create a 32-bit value in your
# source code.
#
# If no clock division is performed on the input clock inside the AVR (via the
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
F_CLOCK = $(F_CPU)
X
X
# Output format. (can be srec, ihex, binary)
FORMAT = ihex
X
X
# Target file name (without extension).
TARGET = AudioInput
X
X
# Object files directory
# To put object files in current directory, use a dot (.), do NOT make
# this an empty or blank macro!
OBJDIR = .
X
X
# Path to the LUFA library
LUFA_PATH = ..
X
X
# LUFA library compile-time options and predefined tokens
LUFA_OPTS = -D USB_DEVICE_ONLY
LUFA_OPTS += -D FIXED_CONTROL_ENDPOINT_SIZE=8
# WZab
# LUFA_OPTS += -D INTERRUPT_CONTROL_ENDPOINT
LUFA_OPTS += -D FIXED_NUM_CONFIGURATIONS=1
LUFA_OPTS += -D USE_FLASH_DESCRIPTORS
LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"
X
LUFA_OPTS += -D MICROPHONE_BIASED_TO_HALF_RAIL
LUFA_OPTS += -D USE_TEST_TONE
X
X
# Create the LUFA source path variables by including the LUFA root makefile
include $(LUFA_PATH)/LUFA/makefile
X
X
# List C source files here. (C dependencies are automatically generated.)
SRC = $(TARGET).c \
X rfm70.c \
X Descriptors.c \
X $(LUFA_SRC_USB) \
X $(LUFA_SRC_USBCLASS)
X
X
# List C++ source files here. (C dependencies are automatically generated.)
CPPSRC =
X
X
# List Assembler source files here.
# Make them always end in a capital .S. Files ending in a lowercase .s
# will not be considered source files but generated files (assembler
# output from the compiler), and will be deleted upon "make clean"!
# Even though the DOS/Win* filesystem matches both .s and .S the same,
# it will preserve the spelling of the filenames, and gcc itself does
# care about how the name is spelled on its command-line.
ASRC =
X
# Optimization level, can be [0, 1, 2, 3, s].
# 0 = turn off optimization. s = optimize for size.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = s
X
X
# Debugging format.
# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
# AVR Studio 4.10 requires dwarf-2.
# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
DEBUG = dwarf-2
X
X
# List any extra directories to look for include files here.
# Each directory must be seperated by a space.
# Use forward slashes for directory separators.
# For a directory that has spaces, enclose it in quotes.
EXTRAINCDIRS = $(LUFA_PATH)/
X
X
# Compiler flag to set the C Standard level.
# c89 = "ANSI" C
# gnu89 = c89 plus GCC extensions
# c99 = ISO C99 standard (not yet fully implemented)
# gnu99 = c99 plus GCC extensions
CSTANDARD = -std=c99
X
X
# Place -D or -U options here for C sources
CDEFS = -DF_CPU=$(F_CPU)UL
CDEFS += -DF_CLOCK=$(F_CLOCK)UL
CDEFS += -DBOARD=BOARD_$(BOARD)
CDEFS += $(LUFA_OPTS)
X
X
# Place -D or -U options here for ASM sources
ADEFS = -DF_CPU=$(F_CPU)
ADEFS += -DF_CLOCK=$(F_CLOCK)UL
ADEFS += -DBOARD=BOARD_$(BOARD)
ADEFS += $(LUFA_OPTS)
X
# Place -D or -U options here for C++ sources
CPPDEFS = -DF_CPU=$(F_CPU)UL
CPPDEFS += -DF_CLOCK=$(F_CLOCK)UL
CPPDEFS += -DBOARD=BOARD_$(BOARD)
CPPDEFS += $(LUFA_OPTS)
#CPPDEFS += -D__STDC_LIMIT_MACROS
#CPPDEFS += -D__STDC_CONSTANT_MACROS
X
X
X
#---------------- Compiler Options C ----------------
# -g*: generate debugging information
# -O*: optimization level
# -f...: tuning, see GCC manual and avr-libc documentation
# -Wall...: warning level
# -Wa,...: tell GCC to pass this to the assembler.
# -adhlns...: create assembler listing
CFLAGS = -g$(DEBUG)
CFLAGS += $(CDEFS)
CFLAGS += -O$(OPT)
CFLAGS += -funsigned-char
CFLAGS += -funsigned-bitfields
CFLAGS += -ffunction-sections
CFLAGS += -fno-inline-small-functions
CFLAGS += -fpack-struct
CFLAGS += -fshort-enums
CFLAGS += -fno-strict-aliasing
CFLAGS += -Wall
CFLAGS += -Wstrict-prototypes
#CFLAGS += -mshort-calls
#CFLAGS += -fno-unit-at-a-time
#CFLAGS += -Wundef
#CFLAGS += -Wunreachable-code
#CFLAGS += -Wsign-compare
CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)
CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
CFLAGS += $(CSTANDARD)
X
X
#---------------- Compiler Options C++ ----------------
# -g*: generate debugging information
# -O*: optimization level
# -f...: tuning, see GCC manual and avr-libc documentation
# -Wall...: warning level
# -Wa,...: tell GCC to pass this to the assembler.
# -adhlns...: create assembler listing
CPPFLAGS = -g$(DEBUG)
CPPFLAGS += $(CPPDEFS)
CPPFLAGS += -O$(OPT)
CPPFLAGS += -funsigned-char
CPPFLAGS += -funsigned-bitfields
CPPFLAGS += -fpack-struct
CPPFLAGS += -fshort-enums
CPPFLAGS += -fno-exceptions
CPPFLAGS += -Wall
CPPFLAGS += -Wundef
#CPPFLAGS += -mshort-calls
#CPPFLAGS += -fno-unit-at-a-time
#CPPFLAGS += -Wstrict-prototypes
#CPPFLAGS += -Wunreachable-code
#CPPFLAGS += -Wsign-compare
CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)
CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
#CPPFLAGS += $(CSTANDARD)
X
X
#---------------- Assembler Options ----------------
# -Wa,...: tell GCC to pass this to the assembler.
# -adhlns: create listing
# -gstabs: have the assembler create line number information; note that
# for use in COFF files, additional information about filenames
# and function names needs to be present in the assembler source
# files -- see avr-libc docs [FIXME: not yet described there]
# -listing-cont-lines: Sets the maximum number of continuation lines of hex
# dump that will be displayed for a given single line of source input.
ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100
X
X
#---------------- Library Options ----------------
# Minimalistic printf version
PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
X
# Floating point printf version (requires MATH_LIB = -lm below)
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
X
# If this is left blank, then it will use the Standard printf version.
PRINTF_LIB =
#PRINTF_LIB = $(PRINTF_LIB_MIN)
#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
X
X
# Minimalistic scanf version
SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
X
# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
X
# If this is left blank, then it will use the Standard scanf version.
SCANF_LIB =
#SCANF_LIB = $(SCANF_LIB_MIN)
#SCANF_LIB = $(SCANF_LIB_FLOAT)
X
X
MATH_LIB = -lm
X
X
# List any extra directories to look for libraries here.
# Each directory must be seperated by a space.
# Use forward slashes for directory separators.
# For a directory that has spaces, enclose it in quotes.
EXTRALIBDIRS =
X
X
X
#---------------- External Memory Options ----------------
X
# 64 KB of external RAM, starting after internal RAM (ATmega128!),
# used for variables (.data/.bss) and heap (malloc()).
#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
X
# 64 KB of external RAM, starting after internal RAM (ATmega128!),
# only used for heap (malloc()).
#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff
X
EXTMEMOPTS =
X
X
X
#---------------- Linker Options ----------------
# -Wl,...: tell GCC to pass this to linker.
# -Map: create map file
# --cref: add cross reference to map file
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
LDFLAGS += -Wl,--relax
LDFLAGS += -Wl,--gc-sections
LDFLAGS += $(EXTMEMOPTS)
LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
#LDFLAGS += -T linker_script.x
X
X
X
#---------------- Programming Options (avrdude) ----------------
X
# Programming hardware
# Type: avrdude -c ?
# to get a full listing.
#
AVRDUDE_PROGRAMMER = jtagmkII
X
# com1 = serial port. Use lpt1 to connect to parallel port.
AVRDUDE_PORT = usb
X
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
X
X
# Uncomment the following if you want avrdude's erase cycle counter.
# Note that this counter needs to be initialized first using -Yn,
# see avrdude manual.
#AVRDUDE_ERASE_COUNTER = -y
X
# Uncomment the following if you do /not/ wish a verification to be
# performed after programming the device.
#AVRDUDE_NO_VERIFY = -V
X
# Increase verbosity level. Please use this when submitting bug
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
# to submit bug reports.
#AVRDUDE_VERBOSE = -v -v
X
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
X
X
X
#---------------- Debugging Options ----------------
X
# For simulavr only - target MCU frequency.
DEBUG_MFREQ = $(F_CPU)
X
# Set the DEBUG_UI to either gdb or insight.
# DEBUG_UI = gdb
DEBUG_UI = insight
X
# Set the debugging back-end to either avarice, simulavr.
DEBUG_BACKEND = avarice
#DEBUG_BACKEND = simulavr
X
# GDB Init Filename.
GDBINIT_FILE = __avr_gdbinit
X
# When using avarice settings for the JTAG
JTAG_DEV = /dev/com1
X
# Debugging port used to communicate between GDB / avarice / simulavr.
DEBUG_PORT = 4242
X
# Debugging host used to communicate between GDB / avarice / simulavr, normally
# just set to localhost unless doing some sort of crazy debugging when
# avarice is running on a different computer.
DEBUG_HOST = localhost
X
X
X
#============================================================================
X
X
# Define programs and commands.
SHELL = sh
CC = avr-gcc
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size
AR = avr-ar rcs
NM = avr-nm
AVRDUDE = avrdude
REMOVE = rm -f
REMOVEDIR = rm -rf
COPY = cp
WINSHELL = cmd
X
X
# Define Messages
# English
MSG_ERRORS_NONE = Errors: none
MSG_BEGIN = -------- begin --------
MSG_END = -------- end --------
MSG_SIZE_BEFORE = Size before:
MSG_SIZE_AFTER = Size after:
MSG_COFF = Converting to AVR COFF:
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
MSG_FLASH = Creating load file for Flash:
MSG_EEPROM = Creating load file for EEPROM:
MSG_EXTENDED_LISTING = Creating Extended Listing:
MSG_SYMBOL_TABLE = Creating Symbol Table:
MSG_LINKING = Linking:
MSG_COMPILING = Compiling C:
MSG_COMPILING_CPP = Compiling C++:
MSG_ASSEMBLING = Assembling:
MSG_CLEANING = Cleaning project:
MSG_CREATING_LIBRARY = Creating library:
X
X
X
X
# Define all object files.
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o)
X
# Define all listing files.
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst)
X
X
# Compiler flags to generate dependency files.
GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d
X
X
# Combine all necessary flags and optional flags.
# Add target processor to flags.
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
X
X
X
X
X
# Default target.
all: begin gccversion sizebefore build sizeafter end
X
# Change the build target to build a HEX file or a library.
build: elf hex eep lss sym
#build: lib
X
X
elf: $(TARGET).elf
hex: $(TARGET).hex
eep: $(TARGET).eep
lss: $(TARGET).lss
sym: $(TARGET).sym
LIBNAME=lib$(TARGET).a
lib: $(LIBNAME)
X
X
X
# Eye candy.
# AVR Studio 3.x does not check make's exit code but relies on
# the following magic strings to be generated by the compile job.
begin:
X @echo
X @echo $(MSG_BEGIN)
X
end:
X @echo $(MSG_END)
X @echo
X
X
# Display size of file.
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf
MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )
FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )
X
X
sizebefore:
X @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
X 2>/dev/null; echo; fi
X
sizeafter:
X @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
X 2>/dev/null; echo; fi
X
X
X
# Display compiler version information.
gccversion :
X @$(CC) --version
X
X
# Program the device.
program: $(TARGET).hex $(TARGET).eep
X $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
X
flip: $(TARGET).hex
X batchisp -hardware usb -device $(MCU) -operation erase f
X batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program
X batchisp -hardware usb -device $(MCU) -operation start reset 0
X
dfu: $(TARGET).hex
X dfu-programmer $(MCU) erase
X dfu-programmer $(MCU) flash $(TARGET).hex
X dfu-programmer $(MCU) reset
X
flip-ee: $(TARGET).hex $(TARGET).eep
X $(COPY) $(TARGET).eep $(TARGET)eep.hex
X batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase
X batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program
X batchisp -hardware usb -device $(MCU) -operation start reset 0
X $(REMOVE) $(TARGET)eep.hex
X
dfu-ee: $(TARGET).hex $(TARGET).eep
X dfu-programmer $(MCU) eeprom-flash $(TARGET).eep
X dfu-programmer $(MCU) reset
X
X
# Generate avr-gdb config/init file which does the following:
# define the reset signal, load the target file, connect to target, and set
# a breakpoint at main().
gdb-config:
X @$(REMOVE) $(GDBINIT_FILE)
X @echo define reset >> $(GDBINIT_FILE)
X @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
X @echo end >> $(GDBINIT_FILE)
X @echo file $(TARGET).elf >> $(GDBINIT_FILE)
X @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)
ifeq ($(DEBUG_BACKEND),simulavr)
X @echo load >> $(GDBINIT_FILE)
endif
X @echo break main >> $(GDBINIT_FILE)
X
debug: gdb-config $(TARGET).elf
ifeq ($(DEBUG_BACKEND), avarice)
X @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
X @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
X $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
X @$(WINSHELL) /c pause
X
else
X @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
X $(DEBUG_MFREQ) --port $(DEBUG_PORT)
endif
X @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
X
X
X
X
# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
COFFCONVERT = $(OBJCOPY) --debugging
COFFCONVERT += --change-section-address .data-0x800000
COFFCONVERT += --change-section-address .bss-0x800000
COFFCONVERT += --change-section-address .noinit-0x800000
COFFCONVERT += --change-section-address .eeprom-0x810000
X
X
X
coff: $(TARGET).elf
X @echo
X @echo $(MSG_COFF) $(TARGET).cof
X $(COFFCONVERT) -O coff-avr $< $(TARGET).cof
X
X
extcoff: $(TARGET).elf
X @echo
X @echo $(MSG_EXTENDED_COFF) $(TARGET).cof
X $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
X
X
X
# Create final output files (.hex, .eep) from ELF output file.
%.hex: %.elf
X @echo
X @echo $(MSG_FLASH) $@
X $(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock $< $@
X
%.eep: %.elf
X @echo
X @echo $(MSG_EEPROM) $@
X -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
X --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0
X
# Create extended listing file from ELF output file.
%.lss: %.elf
X @echo
X @echo $(MSG_EXTENDED_LISTING) $@
X $(OBJDUMP) -h -S -z $< > $@
X
# Create a symbol table from ELF output file.
%.sym: %.elf
X @echo
X @echo $(MSG_SYMBOL_TABLE) $@
X $(NM) -n $< > $@
X
X
X
# Create library from object files.
X.SECONDARY : $(TARGET).a
X.PRECIOUS : $(OBJ)
%.a: $(OBJ)
X @echo
X @echo $(MSG_CREATING_LIBRARY) $@
X $(AR) $@ $(OBJ)
X
X
# Link: create ELF output file from object files.
X.SECONDARY : $(TARGET).elf
X.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
X @echo
X @echo $(MSG_LINKING) $@
X $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
X
X
# Compile: create object files from C source files.
$(OBJDIR)/%.o : %.c
X @echo
X @echo $(MSG_COMPILING) $<
X $(CC) -c $(ALL_CFLAGS) $< -o $@
X
X
# Compile: create object files from C++ source files.
$(OBJDIR)/%.o : %.cpp
X @echo
X @echo $(MSG_COMPILING_CPP) $<
X $(CC) -c $(ALL_CPPFLAGS) $< -o $@
X
X
# Compile: create assembler files from C source files.
%.s : %.c
X $(CC) -S $(ALL_CFLAGS) $< -o $@
X
X
# Compile: create assembler files from C++ source files.
%.s : %.cpp
X $(CC) -S $(ALL_CPPFLAGS) $< -o $@
X
X
# Assemble: create object files from assembler source files.
$(OBJDIR)/%.o : %.S
X @echo
X @echo $(MSG_ASSEMBLING) $<
X $(CC) -c $(ALL_ASFLAGS) $< -o $@
X
X
# Create preprocessed source for use in sending a bug report.
%.i : %.c
X $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
X
X
# Target: clean project.
clean: begin clean_list end
X
clean_list :
X @echo
X @echo $(MSG_CLEANING)
X $(REMOVE) $(TARGET).hex
X $(REMOVE) $(TARGET).eep
X $(REMOVE) $(TARGET).cof
X $(REMOVE) $(TARGET).elf
X $(REMOVE) $(TARGET).map
X $(REMOVE) $(TARGET).sym
X $(REMOVE) $(TARGET).lss
X $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o)
X $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst)
X $(REMOVE) $(SRC:.c=.s)
X $(REMOVE) $(SRC:.c=.d)
X $(REMOVE) $(SRC:.c=.i)
X $(REMOVEDIR) .dep
X
doxygen:
X @echo Generating Project Documentation...
X @doxygen Doxygen.conf
X @echo Documentation Generation Complete.
X
clean_doxygen:
X rm -rf Documentation
X
# Create object files directory
$(shell mkdir $(OBJDIR) 2>/dev/null)
X
X
# Include the dependency files.
-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
X
X
# Listing of phony targets.
X.PHONY : all begin finish end sizebefore sizeafter gccversion \
build elf hex eep lss sym coff extcoff doxygen clean \
clean_list clean_doxygen program dfu flip flip-ee dfu-ee \
debug gdb-config
X
SHAR_EOF
(set 20 11 01 15 14 58 36 'rx/makefile'
eval "${shar_touch}") && \
chmod 0644 'rx/makefile'
if test $? -ne 0
then ${echo} "restore of rx/makefile failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'rx/makefile': 'MD5 check failed'
) << \SHAR_EOF
336f6af18df003ba3130d9a9f9830e48 rx/makefile
SHAR_EOF
else
test `LC_ALL=C wc -c < 'rx/makefile'` -ne 21111 && \
${echo} "restoration warning: size of 'rx/makefile' is not 21111"
fi
fi
# ============= rx/abuf.h ==============
if test -f 'rx/abuf.h' && test "$first_param" != -c; then
${echo} "x - SKIPPING rx/abuf.h (file already exists)"
else
${echo} "x - extracting rx/abuf.h (text)"
sed 's/^X//' << 'SHAR_EOF' > 'rx/abuf.h' &&
#define L2_ABUF_LEN 6
#define ABUF_LEN (1<<L2_ABUF_LEN)
X
SHAR_EOF
(set 20 11 01 07 16 38 26 'rx/abuf.h'
eval "${shar_touch}") && \
chmod 0644 'rx/abuf.h'
if test $? -ne 0
then ${echo} "restore of rx/abuf.h failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'rx/abuf.h': 'MD5 check failed'
) << \SHAR_EOF
9870e642ea5616cf06fb6fa4a004c3ab rx/abuf.h
SHAR_EOF
else
test `LC_ALL=C wc -c < 'rx/abuf.h'` -ne 57 && \
${echo} "restoration warning: size of 'rx/abuf.h' is not 57"
fi
fi
# ============= rx/AudioInput.lst ==============
if test -f 'rx/AudioInput.lst' && test "$first_param" != -c; then
${echo} "x - SKIPPING rx/AudioInput.lst (file already exists)"
else
${echo} "x - extracting rx/AudioInput.lst (text)"
sed 's/^X//' << 'SHAR_EOF' > 'rx/AudioInput.lst' &&
X 1 .file "AudioInput.c"
X 2 __SREG__ = 0x3f
X 3 __SP_H__ = 0x3e
X 4 __SP_L__ = 0x3d
X 5 __CCP__ = 0x34
X 6 __tmp_reg__ = 0
X 7 __zero_reg__ = 1
X 15 .Ltext0:
X 16 .section .text.__vector_17,"ax",@progbits
X 17 .global __vector_17
X 19 __vector_17:
X 20 .LFB98:
X 21 .LSM0:
X 22 0000 1F92 push __zero_reg__
X 23 0002 0F92 push r0
X 24 0004 0FB6 in r0,__SREG__
X 25 0006 0F92 push r0
X 26 0008 1124 clr __zero_reg__
X 27 000a 8F93 push r24
X 28 /* prologue: Signal */
X 29 /* frame size = 0 */
X 30 .LSM1:
X 31 000c 8091 0000 lds r24,timer_count
X 32 0010 8823 tst r24
X 33 0012 01F0 breq .L3
X 34 0014 8091 0000 lds r24,timer_count
X 35 0018 8150 subi r24,lo8(-(-1))
X 36 001a 8093 0000 sts timer_count,r24
X 37 .L3:
X 38 /* epilogue start */
X 39 .LSM2:
X 40 001e 8F91 pop r24
X 41 0020 0F90 pop r0
X 42 0022 0FBE out __SREG__,r0
X 43 0024 0F90 pop r0
X 44 0026 1F90 pop __zero_reg__
X 45 0028 1895 reti
X 46 .LFE98:
X 48 .section .text.__vector_32,"ax",@progbits
X 49 .global __vector_32
X 51 __vector_32:
X 52 .LFB101:
X 53 .LSM3:
X 54 0000 1F92 push __zero_reg__
X 55 0002 0F92 push r0
X 56 0004 0FB6 in r0,__SREG__
X 57 0006 0F92 push r0
X 58 0008 1124 clr __zero_reg__
X 59 000a 8F93 push r24
X 60 /* prologue: Signal */
X 61 /* frame size = 0 */
X 62 .LSM4:
X 63 000c 8091 0000 lds r24,overrun_count
X 64 0010 8823 tst r24
X 65 0012 01F0 breq .L5
X 66 .LSM5:
X 67 0014 8091 0000 lds r24,overrun_count
X 68 0018 8150 subi r24,lo8(-(-1))
X 69 001a 8093 0000 sts overrun_count,r24
X 70 .LSM6:
X 71 001e 8091 0000 lds r24,overrun_count
X 72 0022 8823 tst r24
X 73 0024 01F4 brne .L5
X 74 0026 8898 cbi 49-32,0
X 75 .L5:
X 76 .LSM7:
X 77 0028 8091 0000 lds r24,packet_lost_count
X 78 002c 8823 tst r24
X 79 002e 01F0 breq .L6
X 80 .LSM8:
X 81 0030 8091 0000 lds r24,packet_lost_count
X 82 0034 8150 subi r24,lo8(-(-1))
X 83 0036 8093 0000 sts packet_lost_count,r24
X 84 .LSM9:
X 85 003a 8091 0000 lds r24,packet_lost_count
X 86 003e 8823 tst r24
X 87 0040 01F4 brne .L6
X 88 0042 8998 cbi 49-32,1
X 89 .L6:
X 90 .LSM10:
X 91 0044 8091 0000 lds r24,packet_rcvd_count
X 92 0048 8823 tst r24
X 93 004a 01F0 breq .L8
X 94 .LSM11:
X 95 004c 8091 0000 lds r24,packet_rcvd_count
X 96 0050 8150 subi r24,lo8(-(-1))
X 97 0052 8093 0000 sts packet_rcvd_count,r24
X 98 .LSM12:
X 99 0056 8091 0000 lds r24,packet_rcvd_count
X 100 005a 8823 tst r24
X 101 005c 01F4 brne .L8
X 102 005e 5998 cbi 43-32,1
X 103 .L8:
X 104 /* epilogue start */
X 105 .LSM13:
X 106 0060 8F91 pop r24
X 107 0062 0F90 pop r0
X 108 0064 0FBE out __SREG__,r0
X 109 0066 0F90 pop r0
X 110 0068 1F90 pop __zero_reg__
X 111 006a 1895 reti
X 112 .LFE101:
X 114 .section .text.beep,"ax",@progbits
X 115 .global beep
X 117 beep:
X 118 .LFB104:
X 119 .LSM14:
X 120 .LVL0:
X 121 /* prologue: function */
X 122 /* frame size = 0 */
X 123 0000 582F mov r21,r24
X 124 .LSM15:
X 125 0002 509A sbi 42-32,0
X 126 0004 40E8 ldi r20,lo8(-128)
X 127 .LVL1:
X 128 0006 20E0 ldi r18,lo8(0)
X 129 0008 30E0 ldi r19,hi8(0)
X 130 .LBB196:
X 131 .LBB197:
X 132 .LBB198:
X 133 .LBB199:
X 134 .LSM16:
X 135 000a 60E9 ldi r22,lo8(400)
X 136 000c 71E0 ldi r23,hi8(400)
X 137 .LVL2:
X 138 .L12:
X 139 .LBE199:
X 140 .LBE198:
X 141 .LBE197:
X 142 .LBE196:
X 143 .LSM17:
X 144 000e 842F mov r24,r20
X 145 .LVL3:
X 146 0010 8523 and r24,r21
X 147 0012 01F0 breq .L10
X 148 .LSM18:
X 149 0014 589A sbi 43-32,0
X 150 0016 00C0 rjmp .L19
X 151 .L10:
X 152 .LSM19:
X 153 0018 5898 cbi 43-32,0
X 154 .L19:
X 155 001a 80ED ldi r24,lo8(2000)
X 156 001c 97E0 ldi r25,hi8(2000)
X 157 .LVL4:
X 158 .L15:
X 159 .LBB203:
X 160 .LBB202:
X 161 .LBB201:
X 162 .LBB200:
X 163 .LSM20:
X 164 001e FB01 movw r30,r22
X 165 /* #APP */
X 166 ; 105 "/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h" 1
X 167 0020 3197 1: sbiw r30,1
X 168 0022 01F4 brne 1b
X 169 ; 0 "" 2
X 170 /* #NOAPP */
X 171 .LBE200:
X 172 .LBE201:
X 173 .LSM21:
X 174 0024 0197 sbiw r24,1
X 175 .LSM22:
X 176 0026 01F4 brne .L15
X 177 .LBE202:
X 178 .LBE203:
X 179 .LSM23:
X 180 0028 4695 lsr r20
X 181 002a 2F5F subi r18,lo8(-(1))
X 182 002c 3F4F sbci r19,hi8(-(1))
X 183 .LSM24:
X 184 002e 2830 cpi r18,8
X 185 0030 3105 cpc r19,__zero_reg__
X 186 0032 01F4 brne .L12
X 187 .LSM25:
X 188 0034 5898 cbi 43-32,0
X 189 0036 80EA ldi r24,lo8(4000)
X 190 0038 9FE0 ldi r25,hi8(4000)
X 191 .LVL5:
X 192 .LBB204:
X 193 .LBB205:
X 194 .LBB206:
X 195 .LBB207:
X 196 .LSM26:
X 197 003a 20E9 ldi r18,lo8(400)
X 198 003c 31E0 ldi r19,hi8(400)
X 199 .L13:
X 200 003e F901 movw r30,r18
X 201 .LVL6:
X 202 /* #APP */
X 203 ; 105 "/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h" 1
X 204 0040 3197 1: sbiw r30,1
X 205 0042 01F4 brne 1b
X 206 ; 0 "" 2
X 207 /* #NOAPP */
X 208 .LBE207:
X 209 .LBE206:
X 210 .LSM27:
X 211 0044 0197 sbiw r24,1
X 212 .LSM28:
X 213 0046 01F4 brne .L13
X 214 /* epilogue start */
X 215 .LBE205:
X 216 .LBE204:
X 217 .LSM29:
X 218 0048 0895 ret
X 219 .LFE104:
X 221 .section .text.show_error,"ax",@progbits
X 222 .global show_error
X 224 show_error:
X 225 .LFB105:
X 226 .LSM30:
X 227 .LVL7:
X 228 /* prologue: function */
X 229 /* frame size = 0 */
X 230 0000 382F mov r19,r24
X 231 .LSM31:
X 232 0002 509A sbi 42-32,0
X 233 0004 20E8 ldi r18,lo8(-128)
X 234 .LVL8:
X 235 .LBB208:
X 236 .LBB209:
X 237 .LBB210:
X 238 .LBB211:
X 239 .LSM32:
X 240 0006 40E9 ldi r20,lo8(400)
X 241 0008 51E0 ldi r21,hi8(400)
X 242 000a 00C0 rjmp .L30
X 243 .LVL9:
X 244 .L24:
X 245 .LBE211:
X 246 .LBE210:
X 247 .LBE209:
X 248 .LBE208:
X 249 .LSM33:
X 250 000c 822F mov r24,r18
X 251 .LVL10:
X 252 000e 8323 and r24,r19
X 253 0010 01F0 breq .L22
X 254 .LSM34:
X 255 0012 589A sbi 43-32,0
X 256 0014 00C0 rjmp .L31
X 257 .L22:
X 258 .LSM35:
X 259 0016 5898 cbi 43-32,0
X 260 .L31:
X 261 0018 80ED ldi r24,lo8(2000)
X 262 001a 97E0 ldi r25,hi8(2000)
X 263 .LVL11:
X 264 .L27:
X 265 .LBB215:
X 266 .LBB216:
X 267 .LBB217:
X 268 .LBB218:
X 269 .LSM36:
X 270 001c FA01 movw r30,r20
X 271 .LVL12:
X 272 /* #APP */
X 273 ; 105 "/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h" 1
X 274 001e 3197 1: sbiw r30,1
X 275 0020 01F4 brne 1b
X 276 ; 0 "" 2
X 277 /* #NOAPP */
X 278 .LBE218:
X 279 .LBE217:
X 280 .LSM37:
X 281 0022 0197 sbiw r24,1
X 282 .LSM38:
X 283 0024 01F4 brne .L27
X 284 .LBE216:
X 285 .LBE215:
X 286 .LSM39:
X 287 0026 2695 lsr r18
X 288 .LVL13:
X 289 .L30:
X 290 .LSM40:
X 291 0028 2223 tst r18
X 292 002a 01F4 brne .L24
X 293 .LSM41:
X 294 002c 5898 cbi 43-32,0
X 295 002e 80EA ldi r24,lo8(4000)
X 296 0030 9FE0 ldi r25,hi8(4000)
X 297 .LVL14:
X 298 .L25:
X 299 .LBB219:
X 300 .LBB214:
X 301 .LBB213:
X 302 .LBB212:
X 303 .LSM42:
X 304 0032 FA01 movw r30,r20
X 305 .LVL15:
X 306 /* #APP */
X 307 ; 105 "/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h" 1
X 308 0034 3197 1: sbiw r30,1
X 309 0036 01F4 brne 1b
X 310 ; 0 "" 2
X 311 /* #NOAPP */
X 312 .LBE212:
X 313 .LBE213:
X 314 .LSM43:
X 315 0038 0197 sbiw r24,1
X 316 .LSM44:
X 317 003a 01F4 brne .L25
X 318 003c 20E8 ldi r18,lo8(-128)
X 319 003e 00C0 rjmp .L24
X 320 .LBE214:
X 321 .LBE219:
X 322 .LFE105:
X 324 .section .text.__vector_1,"ax",@progbits
X 325 .global __vector_1
X 327 __vector_1:
X 328 .LFB113:
X 329 .LSM45:
X 330 0000 1F92 push __zero_reg__
X 331 0002 0F92 push r0
X 332 0004 0FB6 in r0,__SREG__
X 333 0006 0F92 push r0
X 334 0008 1124 clr __zero_reg__
X 335 000a BF92 push r11
X 336 000c CF92 push r12
X 337 000e DF92 push r13
X 338 0010 EF92 push r14
X 339 0012 FF92 push r15
X 340 0014 0F93 push r16
X 341 0016 1F93 push r17
X 342 0018 2F93 push r18
X 343 001a 3F93 push r19
X 344 001c 4F93 push r20
X 345 001e 5F93 push r21
X 346 0020 6F93 push r22
X 347 0022 7F93 push r23
X 348 0024 8F93 push r24
X 349 0026 9F93 push r25
X 350 0028 AF93 push r26
X 351 002a BF93 push r27
X 352 002c EF93 push r30
X 353 002e FF93 push r31
X 354 /* prologue: Signal */
X 355 /* frame size = 0 */
X 356 .LSM46:
X 357 0030 8AE0 ldi r24,lo8(10)
X 358 0032 8093 0000 sts timer_count,r24
X 359 .LSM47:
X 360 0036 E898 cbi 61-32,0
X 361 .LSM48:
X 362 0038 81E0 ldi r24,lo8(1)
X 363 003a 8CBB out 60-32,r24
X 364 .LSM49:
X 365 003c 599A sbi 43-32,1
X 366 .LSM50:
X 367 003e 84E6 ldi r24,lo8(100)
X 368 0040 8093 0000 sts packet_rcvd_count,r24
X 369 .LSM51:
X 370 /* #APP */
X 371 ; 262 "AudioInput.c" 1
X 372 0044 7894 sei
X 373 ; 0 "" 2
X 374 /* #NOAPP */
X 375 0046 9091 0000 lds r25,old_pkt_nr.3828
X 376 .LVL16:
X 377 .LBB220:
X 378 .LBB221:
X 379 .LBB222:
X 380 .LBB226:
X 381 .LBB227:
X 382 .LSM52:
X 383 004a 67E2 ldi r22,lo8(39)
X 384 004c B62E mov r11,r22
X 385 .LBE227:
X 386 .LBE226:
X 387 .LBB223:
X 388 .LBB224:
X 389 004e 50E4 ldi r21,lo8(64)
X 390 0050 C52E mov r12,r21
X 391 .LBE224:
X 392 .LBE223:
X 393 .LBE222:
X 394 .LBE221:
X 395 .LBB236:
X 396 .LBB237:
X 397 .LBB238:
X 398 .LBB239:
X 399 0052 47E1 ldi r20,lo8(23)
X 400 0054 D42E mov r13,r20
X 401 .LBE239:
X 402 .LBE238:
X 403 .LBE237:
X 404 .LBE236:
X 405 .LBB249:
X 406 .LBB250:
X 407 0056 31E6 ldi r19,lo8(97)
X 408 0058 E32E mov r14,r19
X 409 .LBE250:
X 410 .LBE249:
X 411 .LSM53:
X 412 005a 24E6 ldi r18,lo8(100)
X 413 005c F22E mov r15,r18
X 414 .LBB252:
X 415 .LBB253:
X 416 .LSM54:
X 417 005e 08EC ldi r16,lo8(-56)
X 418 .LVL17:
X 419 .L55:
X 420 .LBE253:
X 421 .LBE252:
X 422 .LBB255:
X 423 .LBB235:
X 424 .LBB229:
X 425 .LBB230:
X 426 .LSM55:
X 427 0060 2898 cbi 37-32,0
X 428 .LBE230:
X 429 .LBE229:
X 430 .LBB231:
X 431 .LBB228:
X 432 .LSM56:
X 433 0062 BEBC out 78-32,r11
X 434 .L33:
X 435 .LSM57:
X 436 0064 0DB4 in __tmp_reg__,77-32
X 437 0066 07FE sbrs __tmp_reg__,7
X 438 0068 00C0 rjmp .L33
X 439 .LSM58:
X 440 006a 8EB5 in r24,78-32
X 441 .LBE228:
X 442 .LBE231:
X 443 .LBB232:
X 444 .LBB225:
X 445 .LSM59:
X 446 006c CEBC out 78-32,r12
X 447 .L34:
X 448 .LSM60:
X 449 006e 0DB4 in __tmp_reg__,77-32
X 450 0070 07FE sbrs __tmp_reg__,7
X 451 0072 00C0 rjmp .L34
X 452 .LSM61:
X 453 0074 8EB5 in r24,78-32
X 454 .LBE225:
X 455 .LBE232:
X 456 .LBB233:
X 457 .LBB234:
X 458 .LSM62:
X 459 0076 289A sbi 37-32,0
X 460 .LBE234:
X 461 .LBE233:
X 462 .LBE235:
X 463 .LBE255:
X 464 .LBB256:
X 465 .LBB248:
X 466 .LBB241:
X 467 .LBB242:
X 468 .LSM63:
X 469 0078 2898 cbi 37-32,0
X 470 .LBE242:
X 471 .LBE241:
X 472 .LBB243:
X 473 .LBB240:
X 474 .LSM64:
X 475 007a DEBC out 78-32,r13
X 476 .L35:
X 477 .LSM65:
X 478 007c 0DB4 in __tmp_reg__,77-32
X 479 007e 07FE sbrs __tmp_reg__,7
X 480 0080 00C0 rjmp .L35
X 481 .LSM66:
X 482 0082 8EB5 in r24,78-32
X 483 .LBE240:
X 484 .LBE243:
X 485 .LBB244:
X 486 .LBB245:
X 487 .LSM67:
X 488 0084 1EBC out 78-32,__zero_reg__
X 489 .L36:
X 490 .LSM68:
X 491 0086 0DB4 in __tmp_reg__,77-32
X 492 0088 07FE sbrs __tmp_reg__,7
X 493 008a 00C0 rjmp .L36
X 494 .LSM69:
X 495 008c 8EB5 in r24,78-32
X 496 .LVL18:
X 497 .LBE245:
X 498 .LBE244:
X 499 .LBB246:
X 500 .LBB247:
X 501 .LSM70:
X 502 008e 289A sbi 37-32,0
X 503 .LBE247:
X 504 .LBE246:
X 505 .LBE248:
X 506 .LBE256:
X 507 .LSM71:
X 508 0090 80FD sbrc r24,0
X 509 0092 00C0 rjmp .L37
X 510 .LBB257:
X 511 .LBB258:
X 512 .LSM72:
X 513 0094 2898 cbi 37-32,0
X 514 .LBE258:
X 515 .LBE257:
X 516 .LBB259:
X 517 .LBB251:
X 518 .LSM73:
X 519 0096 EEBC out 78-32,r14
X 520 .L38:
X 521 .LSM74:
X 522 0098 0DB4 in __tmp_reg__,77-32
X 523 009a 07FE sbrs __tmp_reg__,7
X 524 009c 00C0 rjmp .L38
X 525 .LSM75:
X 526 009e 8EB5 in r24,78-32
X 527 .LVL19:
X 528 .LBE251:
X 529 .LBE259:
X 530 .LBB260:
X 531 .LBB261:
X 532 .LSM76:
X 533 00a0 1EBC out 78-32,__zero_reg__
X 534 .L39:
X 535 .LSM77:
X 536 00a2 0DB4 in __tmp_reg__,77-32
X 537 00a4 07FE sbrs __tmp_reg__,7
X 538 00a6 00C0 rjmp .L39
X 539 .LSM78:
X 540 00a8 1EB5 in r17,78-32
X 541 .LVL20:
X 542 .LBE261:
X 543 .LBE260:
X 544 .LSM79:
X 545 00aa A12F mov r26,r17
X 546 00ac B0E0 ldi r27,lo8(0)
X 547 00ae 9D01 movw r18,r26
X 548 .LVL21:
X 549 00b0 291B sub r18,r25
X 550 00b2 3109 sbc r19,__zero_reg__
X 551 00b4 2130 cpi r18,1
X 552 00b6 3105 cpc r19,__zero_reg__
X 553 00b8 01F0 breq .L40
X 554 .LVL22:
X 555 .LSM80:
X 556 00ba F092 0000 sts packet_lost_count,r15
X 557 .LSM81:
X 558 00be 899A sbi 49-32,1
X 559 .L40:
X 560 00c0 60E0 ldi r22,lo8(0)
X 561 .LVL23:
X 562 .L46:
X 563 .LBB262:
X 564 .LBB263:
X 565 .LSM82:
X 566 00c2 1EBC out 78-32,__zero_reg__
X 567 .L41:
X 568 .LSM83:
X 569 00c4 0DB4 in __tmp_reg__,77-32
X 570 00c6 07FE sbrs __tmp_reg__,7
X 571 00c8 00C0 rjmp .L41
X 572 .LSM84:
X 573 00ca 7EB5 in r23,78-32
X 574 .LBE263:
X 575 .LBE262:
X 576 .LBB264:
X 577 .LBB265:
X 578 .LSM85:
X 579 00cc 1EBC out 78-32,__zero_reg__
X 580 .L42:
X 581 .LSM86:
X 582 00ce 0DB4 in __tmp_reg__,77-32
X 583 00d0 07FE sbrs __tmp_reg__,7
X 584 00d2 00C0 rjmp .L42
X 585 .LSM87:
X 586 00d4 9EB5 in r25,78-32
X 587 .LVL24:
X 588 .LBE265:
X 589 .LBE264:
X 590 .LBB266:
X 591 .LBB267:
X 592 .LSM88:
X 593 00d6 1EBC out 78-32,__zero_reg__
X 594 .L43:
X 595 .LSM89:
X 596 00d8 0DB4 in __tmp_reg__,77-32
X 597 00da 07FE sbrs __tmp_reg__,7
X 598 00dc 00C0 rjmp .L43
X 599 .LSM90:
X 600 00de 8EB5 in r24,78-32
X 601 .LBE267:
X 602 .LBE266:
X 603 .LSM91:
X 604 00e0 272F mov r18,r23
X 605 00e2 392F mov r19,r25
X 606 00e4 482F mov r20,r24
X 607 00e6 50E0 ldi r21,lo8(0)
X 608 .LBB268:
X 609 .LBB254:
X 610 .LSM92:
X 611 00e8 9091 0000 lds r25,abuf_wptr
X 612 .LVL25:
X 613 00ec 9F5F subi r25,lo8(-(1))
X 614 00ee 9F73 andi r25,lo8(63)
X 615 .LSM93:
X 616 00f0 8091 0000 lds r24,abuf_rptr
X 617 00f4 9817 cp r25,r24
X 618 00f6 01F4 brne .L44
X 619 .LSM94:
X 620 00f8 0093 0000 sts overrun_count,r16
X 621 .LSM95:
X 622 00fc 889A sbi 49-32,0
X 623 00fe 00C0 rjmp .L45
X 624 .L44:
X 625 .LSM96:
X 626 0100 E091 0000 lds r30,abuf_wptr
X 627 0104 F0E0 ldi r31,lo8(0)
X 628 0106 EE0F lsl r30
X 629 0108 FF1F rol r31
X 630 010a EE0F lsl r30
X 631 010c FF1F rol r31
X 632 010e E050 subi r30,lo8(-(abuf))
X 633 0110 F040 sbci r31,hi8(-(abuf))
X 634 0112 2083 st Z,r18
X 635 0114 3183 std Z+1,r19
X 636 0116 4283 std Z+2,r20
X 637 0118 5383 std Z+3,r21
X 638 .LSM97:
X 639 011a 9093 0000 sts abuf_wptr,r25
X 640 .L45:
X 641 .LBE254:
X 642 .LBE268:
X 643 .LSM98:
X 644 011e 6F5F subi r22,lo8(-(1))
X 645 0120 6A30 cpi r22,lo8(10)
X 646 0122 01F4 brne .L46
X 647 .LBB269:
X 648 .LBB270:
X 649 .LSM99:
X 650 0124 1EBC out 78-32,__zero_reg__
X 651 .L47:
X 652 .LSM100:
X 653 0126 0DB4 in __tmp_reg__,77-32
X 654 0128 07FE sbrs __tmp_reg__,7
X 655 012a 00C0 rjmp .L47
X 656 .LSM101:
X 657 012c 2EB5 in r18,78-32
X 658 .LVL26:
X 659 .LBE270:
X 660 .LBE269:
X 661 .LSM102:
X 662 012e CD01 movw r24,r26
X 663 0130 8770 andi r24,lo8(7)
X 664 0132 9070 andi r25,hi8(7)
X 665 0134 8330 cpi r24,3
X 666 0136 9105 cpc r25,__zero_reg__
X 667 0138 01F0 breq .L51
X 668 013a 8430 cpi r24,4
X 669 013c 9105 cpc r25,__zero_reg__
X 670 013e 04F4 brge .L54
X 671 0140 8130 cpi r24,1
X 672 0142 9105 cpc r25,__zero_reg__
X 673 0144 01F0 breq .L49
X 674 0146 0297 sbiw r24,2
X 675 0148 01F4 brne .L48
X 676 014a 00C0 rjmp .L68
X 677 .L54:
X 678 014c 8430 cpi r24,4
X 679 014e 9105 cpc r25,__zero_reg__
X 680 0150 01F0 breq .L52
X 681 0152 0597 sbiw r24,5
X 682 0154 01F4 brne .L48
X 683 0156 00C0 rjmp .L69
X 684 .L49:
X 685 .LSM103:
X 686 0158 2093 0000 sts switches,r18
X 687 015c 00C0 rjmp .L48
X 688 .L68:
X 689 .LSM104:
X 690 015e 2093 0000 sts adc_val,r18
X 691 0162 00C0 rjmp .L48
X 692 .L51:
X 693 .LSM105:
X 694 0164 2093 0000 sts adc_val+1,r18
X 695 0168 00C0 rjmp .L48
X 696 .L52:
X 697 .LSM106:
X 698 016a 2093 0000 sts adc_val+2,r18
X 699 016e 00C0 rjmp .L48
X 700 .L69:
X 701 .LSM107:
X 702 0170 2093 0000 sts adc_val+3,r18
X 703 .L48:
X 704 .LBB271:
X 705 .LBB272:
X 706 .LSM108:
X 707 0174 289A sbi 37-32,0
X 708 0176 912F mov r25,r17
X 709 .LVL27:
X 710 0178 00C0 rjmp .L55
X 711 .LVL28:
X 712 .L37:
X 713 017a 9093 0000 sts old_pkt_nr.3828,r25
X 714 .LBE272:
X 715 .LBE271:
X 716 .LBE220:
X 717 .LSM109:
X 718 /* #APP */
X 719 ; 310 "AudioInput.c" 1
X 720 017e F894 cli
X 721 ; 0 "" 2
X 722 .LSM110:
X 723 /* #NOAPP */
X 724 0180 E89A sbi 61-32,0
X 725 /* epilogue start */
X 726 .LSM111:
X 727 0182 FF91 pop r31
X 728 0184 EF91 pop r30
X 729 0186 BF91 pop r27
X 730 0188 AF91 pop r26
X 731 018a 9F91 pop r25
X 732 .LVL29:
X 733 018c 8F91 pop r24
X 734 .LVL30:
X 735 018e 7F91 pop r23
X 736 0190 6F91 pop r22
X 737 0192 5F91 pop r21
X 738 0194 4F91 pop r20
X 739 0196 3F91 pop r19
X 740 0198 2F91 pop r18
X 741 .LVL31:
X 742 019a 1F91 pop r17
X 743 .LVL32:
X 744 019c 0F91 pop r16
X 745 019e FF90 pop r15
X 746 01a0 EF90 pop r14
X 747 01a2 DF90 pop r13
X 748 01a4 CF90 pop r12
X 749 01a6 BF90 pop r11
X 750 01a8 0F90 pop r0
X 751 01aa 0FBE out __SREG__,r0
X 752 01ac 0F90 pop r0
X 753 01ae 1F90 pop __zero_reg__
X 754 01b0 1895 reti
X 755 .LFE113:
X 757 .section .text.EVENT_USB_Device_Disconnect,"ax",@progbits
X 758 .global EVENT_USB_Device_Disconnect
X 760 EVENT_USB_Device_Disconnect:
X 761 .LFB118:
X 762 .LSM112:
X 763 /* prologue: function */
X 764 /* frame size = 0 */
X 765 .LSM113:
X 766 0000 E898 cbi 61-32,0
X 767 .LBB273:
X 768 .LBB274:
X 769 .LSM114:
X 770 0002 7698 cbi 46-32,6
X 771 /* epilogue start */
X 772 .LBE274:
X 773 .LBE273:
X 774 .LSM115:
X 775 0004 0895 ret
X 776 .LFE118:
X 778 .section .text.EVENT_USB_Device_ControlRequest,"ax",@progbits
X 779 .global EVENT_USB_Device_ControlRequest
X 781 EVENT_USB_Device_ControlRequest:
X 782 .LFB120:
X 783 .LSM116:
X 784 /* prologue: function */
X 785 /* frame size = 0 */
X 786 .LSM117:
X 787 0000 80E0 ldi r24,lo8(Microphone_Audio_Interface)
X 788 0002 90E0 ldi r25,hi8(Microphone_Audio_Interface)
X 789 0004 0E94 0000 call Audio_Device_ProcessControlRequest
X 790 /* epilogue start */
X 791 .LSM118:
X 792 0008 0895 ret
X 793 .LFE120:
X 795 .section .text.EVENT_USB_Device_ConfigurationChanged,"ax",@progbits
X 796 .global EVENT_USB_Device_ConfigurationChanged
X 798 EVENT_USB_Device_ConfigurationChanged:
X 799 .LFB119:
X 800 .LSM119:
X 801 /* prologue: function */
X 802 /* frame size = 0 */
X 803 .LSM120:
X 804 0000 80E0 ldi r24,lo8(Microphone_Audio_Interface)
X 805 0002 90E0 ldi r25,hi8(Microphone_Audio_Interface)
X 806 0004 0E94 0000 call Audio_Device_ConfigureEndpoints
X 807 .LSM121:
X 808 0008 80E0 ldi r24,lo8(Keyboard_MIDI_Interface)
X 809 000a 90E0 ldi r25,hi8(Keyboard_MIDI_Interface)
X 810 000c 0E94 0000 call MIDI_Device_ConfigureEndpoints
X 811 /* epilogue start */
X 812 .LSM122:
X 813 0010 0895 ret
X 814 .LFE119:
X 816 .section .text.EVENT_USB_Device_Connect,"ax",@progbits
X 817 .global EVENT_USB_Device_Connect
X 819 EVENT_USB_Device_Connect:
X 820 .LFB117:
X 821 .LSM123:
X 822 /* prologue: function */
X 823 /* frame size = 0 */
X 824 .LSM124:
X 825 0000 81E0 ldi r24,lo8(1)
X 826 0002 8CBB out 60-32,r24
X 827 .LSM125:
X 828 0004 E89A sbi 61-32,0
X 829 .LBB275:
X 830 .LBB276:
X 831 .LSM126:
X 832 0006 7698 cbi 46-32,6
X 833 .LBE276:
X 834 .LBE275:
X 835 .LBB277:
X 836 .LBB278:
X 837 .LBB279:
X 838 .LBB280:
X 839 .LSM127:
X 840 0008 85E3 ldi r24,lo8(53)
X 841 .LVL33:
X 842 /* #APP */
X 843 ; 83 "/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h" 1
X 844 000a 8A95 1: dec r24
X 845 000c 01F4 brne 1b
X 846 ; 0 "" 2
X 847 /* #NOAPP */
X 848 .LBE280:
X 849 .LBE279:
X 850 .LBE278:
X 851 .LBE277:
X 852 .LSM128:
X 853 000e 80E0 ldi r24,lo8(cmd_flush_tx)
X 854 0010 90E0 ldi r25,hi8(cmd_flush_tx)
X 855 .LVL34:
X 856 0012 62E0 ldi r22,lo8(2)
X 857 0014 0E94 0000 call write_pcmd
X 858 .LSM129:
X 859 0018 80E0 ldi r24,lo8(cmd_flush_rx)
X 860 001a 90E0 ldi r25,hi8(cmd_flush_rx)
X 861 001c 62E0 ldi r22,lo8(2)
X 862 001e 0E94 0000 call write_pcmd
X 863 .LBB281:
X 864 .LBB282:
X 865 .LBB283:
X 866 .LBB284:
X 867 .LSM130:
X 868 0022 2898 cbi 37-32,0
X 869 .LBE284:
X 870 .LBE283:
X 871 .LBB285:
X 872 .LBB286:
X 873 .LSM131:
X 874 0024 87E2 ldi r24,lo8(39)
X 875 0026 8EBD out 78-32,r24
X 876 .L77:
X 877 .LSM132:
X 878 0028 0DB4 in __tmp_reg__,77-32
X 879 002a 07FE sbrs __tmp_reg__,7
X 880 002c 00C0 rjmp .L77
X 881 .LSM133:
X 882 002e 8EB5 in r24,78-32
X 883 .LBE286:
X 884 .LBE285:
X 885 .LBB287:
X 886 .LBB288:
X 887 .LSM134:
X 888 0030 80E7 ldi r24,lo8(112)
X 889 0032 8EBD out 78-32,r24
X 890 .L78:
X 891 .LSM135:
X 892 0034 0DB4 in __tmp_reg__,77-32
X 893 0036 07FE sbrs __tmp_reg__,7
X 894 0038 00C0 rjmp .L78
X 895 .LSM136:
X 896 003a 8EB5 in r24,78-32
X 897 .LBE288:
X 898 .LBE287:
X 899 .LBB289:
X 900 .LBB290:
X 901 .LSM137:
X 902 003c 289A sbi 37-32,0
X 903 .LBE290:
X 904 .LBE289:
X 905 .LBE282:
X 906 .LBE281:
X 907 .LSM138:
X 908 003e 0E94 0000 call switch_to_rx_mode
X 909 /* epilogue start */
X 910 .LSM139:
X 911 0042 0895 ret
X 912 .LFE117:
X 914 .section .text.SetupHardware,"ax",@progbits
X 915 .global SetupHardware
X 917 SetupHardware:
X 918 .LFB116:
X 919 .LSM140:
X 920 /* prologue: function */
X 921 /* frame size = 0 */
X 922 .LSM141:
X 923 0000 84B7 in r24,84-32
X 924 0002 877F andi r24,lo8(-9)
X 925 0004 84BF out 84-32,r24
X 926 .LSM142:
X 927 0006 88E1 ldi r24,lo8(24)
X 928 /* #APP */
X 929 ; 435 "AudioInput.c" 1
X 930 0008 0FB6 in __tmp_reg__, __SREG__
X 931 000a F894 cli
X 932 000c 8093 6000 sts 96, r24
X 933 0010 1092 6000 sts 96, __zero_reg__
X 934 0014 0FBE out __SREG__,__tmp_reg__
X 935
X 936 ; 0 "" 2
X 937 /* #NOAPP */
X 938 .LBB291:
X 939 .LBB292:
X 940 .LSM143:
X 941 0016 90E0 ldi r25,lo8(0)
X 942 0018 80E8 ldi r24,lo8(-128)
X 943 /* #APP */
X 944 ; 1394 "/usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/power.h" 1
X 945 001a 0FB6 in __tmp_reg__,__SREG__
X 946 001c F894 cli
X 947 001e 8093 6100 sts 97, r24
X 948 0022 9093 6100 sts 97, r25
X 949 0026 0FBE out __SREG__, __tmp_reg__
X 950 ; 0 "" 2
X 951 /* #NOAPP */
X 952 .LBE292:
X 953 .LBE291:
X 954 .LBB293:
X 955 .LBB294:
X 956 .LSM144:
X 957 0028 209A sbi 36-32,0
X 958 .LSM145:
X 959 002a 6E9A sbi 45-32,6
X 960 .LBE294:
X 961 .LBE293:
X 962 .LBB295:
X 963 .LBB296:
X 964 .LSM146:
X 965 002c 84B1 in r24,36-32
X 966 002e 8760 ori r24,lo8(7)
X 967 0030 84B9 out 36-32,r24
X 968 .LSM147:
X 969 0032 81E0 ldi r24,lo8(1)
X 970 0034 8DBD out 77-32,r24
X 971 .LSM148:
X 972 0036 80E5 ldi r24,lo8(80)
X 973 0038 8CBD out 76-32,r24
X 974 .LBE296:
X 975 .LBE295:
X 976 .LSM149:
X 977 003a 0E94 0000 call rfm70_init
X 978 .LSM150:
X 979 003e 0E94 0000 call USB_Init
X 980 .LSM151:
X 981 0042 519A sbi 42-32,1
X 982 .LSM152:
X 983 0044 5998 cbi 43-32,1
X 984 .LSM153:
X 985 0046 809A sbi 48-32,0
X 986 .LSM154:
X 987 0048 8898 cbi 49-32,0
X 988 .LSM155:
X 989 004a 819A sbi 48-32,1
X 990 .LSM156:
X 991 004c 8998 cbi 49-32,1
X 992 /* epilogue start */
X 993 .LSM157:
X 994 004e 0895 ret
X 995 .LFE116:
X 997 .section .text.main,"ax",@progbits
X 998 .global main
X 1000 main:
X 1001 .LFB115:
X 1002 .LSM158:
X 1003 0000 8F92 push r8
X 1004 0002 9F92 push r9
X 1005 0004 AF92 push r10
X 1006 0006 BF92 push r11
X 1007 0008 CF92 push r12
X 1008 000a DF92 push r13
X 1009 000c EF92 push r14
X 1010 000e FF92 push r15
X 1011 0010 0F93 push r16
X 1012 0012 1F93 push r17
X 1013 0014 DF93 push r29
X 1014 0016 CF93 push r28
X 1015 0018 00D0 rcall .
X 1016 001a 00D0 rcall .
X 1017 001c CDB7 in r28,__SP_L__
X 1018 001e DEB7 in r29,__SP_H__
X 1019 /* prologue: function */
X 1020 /* frame size = 4 */
X 1021 .LSM159:
X 1022 0020 0E94 0000 call SetupHardware
X 1023 .LSM160:
X 1024 /* #APP */
X 1025 ; 338 "AudioInput.c" 1
X 1026 0024 7894 sei
X 1027 ; 0 "" 2
X 1028 /* #NOAPP */
X 1029 .LBB297:
X 1030 .LBB298:
X 1031 .LSM161:
X 1032 /* #APP */
X 1033 ; 112 "AudioInput.c" 1
X 1034 0026 F894 cli
X 1035 ; 0 "" 2
X 1036 .LSM162:
X 1037 /* #NOAPP */
X 1038 0028 8AE0 ldi r24,lo8(10)
X 1039 002a 8093 0000 sts timer_count,r24
X 1040 .LSM163:
X 1041 /* #APP */
X 1042 ; 114 "AudioInput.c" 1
X 1043 002e 7894 sei
X 1044 ; 0 "" 2
X 1045 /* #NOAPP */
X 1046 .LBE298:
X 1047 .LBE297:
X 1048 .LBB299:
X 1049 .LBB300:
X 1050 .LSM164:
X 1051 0030 8FE7 ldi r24,lo8(3199)
X 1052 0032 9CE0 ldi r25,hi8(3199)
X 1053 0034 9093 8900 sts (136)+1,r25
X 1054 0038 8093 8800 sts 136,r24
X 1055 .LSM165:
X 1056 003c 1092 8000 sts 128,__zero_reg__
X 1057 .LSM166:
X 1058 0040 39E0 ldi r19,lo8(9)
X 1059 0042 3093 8100 sts 129,r19
X 1060 .LSM167:
X 1061 0046 22E0 ldi r18,lo8(2)
X 1062 0048 2093 6F00 sts 111,r18
X 1063 .LBE300:
X 1064 .LBE299:
X 1065 .LBB301:
X 1066 .LBB302:
X 1067 .LSM168:
X 1068 004c 8FEF ldi r24,lo8(31999)
X 1069 004e 9CE7 ldi r25,hi8(31999)
X 1070 0050 9093 9900 sts (152)+1,r25
X 1071 0054 8093 9800 sts 152,r24
X 1072 .LSM169:
X 1073 0058 1092 9000 sts 144,__zero_reg__
X 1074 .LSM170:
X 1075 005c 3093 9100 sts 145,r19
X 1076 .LSM171:
X 1077 0060 2093 7100 sts 113,r18
X 1078 0064 00E0 ldi r16,lo8(0)
X 1079 0066 10E0 ldi r17,hi8(0)
X 1080 .LVL35:
X 1081 .LBE302:
X 1082 .LBE301:
X 1083 .LBB303:
X 1084 .LBB304:
X 1085 .LSM172:
X 1086 0068 8AE0 ldi r24,lo8(10)
X 1087 006a 882E mov r8,r24
X 1088 .LBE304:
X 1089 .LBE303:
X 1090 .LBB306:
X 1091 .LBB307:
X 1092 .LSM173:
X 1093 006c 5E01 movw r10,r28
X 1094 006e 0894 sec
X 1095 0070 A11C adc r10,__zero_reg__
X 1096 0072 B11C adc r11,__zero_reg__
X 1097 .LSM174:
X 1098 0074 B0EB ldi r27,lo8(-80)
X 1099 0076 9B2E mov r9,r27
X 1100 .LVL36:
X 1101 .L98:
X 1102 .LBE307:
X 1103 .LBE306:
X 1104 .LBB310:
X 1105 .LBB338:
X 1106 .LBB339:
X 1107 .LSM175:
X 1108 0078 6091 E900 lds r22,233
X 1109 .LBE339:
X 1110 .LBE338:
X 1111 .LBB336:
X 1112 .LBB337:
X 1113 .LSM176:
X 1114 007c 9091 0000 lds r25,abuf_rptr
X 1115 0080 8091 0000 lds r24,abuf_wptr
X 1116 0084 9817 cp r25,r24
X 1117 0086 01F0 breq .+2
X 1118 0088 00C0 rjmp .L102
X 1119 008a 00C0 rjmp .L85
X 1120 .L104:
X 1121 .LBE337:
X 1122 .LBE336:
X 1123 .LBB329:
X 1124 .LBB330:
X 1125 .LSM177:
X 1126 008c 8091 0000 lds r24,Microphone_Audio_Interface+7
X 1127 0090 8823 tst r24
X 1128 0092 01F0 breq .L85
X 1129 .LSM178:
X 1130 0094 8091 0000 lds r24,Microphone_Audio_Interface+1
X 1131 .LBB333:
X 1132 .LBB334:
X 1133 .LSM179:
X 1134 0098 8093 E900 sts 233,r24
X 1135 .LBE334:
X 1136 .LBE333:
X 1137 .LBB331:
X 1138 .LBB332:
X 1139 .LSM180:
X 1140 009c 8091 E800 lds r24,232
X 1141 .LBE332:
X 1142 .LBE331:
X 1143 .LBE330:
X 1144 .LBE329:
X 1145 .LSM181:
X 1146 00a0 80FF sbrs r24,0
X 1147 00a2 00C0 rjmp .L85
X 1148 .LBB314:
X 1149 .LBB315:
X 1150 .LBB316:
X 1151 .LSM182:
X 1152 00a4 E091 0000 lds r30,abuf_rptr
X 1153 00a8 F0E0 ldi r31,lo8(0)
X 1154 00aa EE0F lsl r30
X 1155 00ac FF1F rol r31
X 1156 00ae EE0F lsl r30
X 1157 00b0 FF1F rol r31
X 1158 00b2 E050 subi r30,lo8(-(abuf))
X 1159 00b4 F040 sbci r31,hi8(-(abuf))
X 1160 00b6 2081 ld r18,Z
X 1161 00b8 3181 ldd r19,Z+1
X 1162 00ba 4281 ldd r20,Z+2
X 1163 00bc 5381 ldd r21,Z+3
X 1164 .LVL37:
X 1165 .LSM183:
X 1166 /* #APP */
X 1167 ; 236 "AudioInput.c" 1
X 1168 00be F894 cli
X 1169 ; 0 "" 2
X 1170 .LSM184:
X 1171 /* #NOAPP */
X 1172 00c0 8091 0000 lds r24,abuf_rptr
X 1173 00c4 8F5F subi r24,lo8(-(1))
X 1174 00c6 8F73 andi r24,lo8(63)
X 1175 00c8 8093 0000 sts abuf_rptr,r24
X 1176 .LSM185:
X 1177 /* #APP */
X 1178 ; 238 "AudioInput.c" 1
X 1179 00cc 7894 sei
X 1180 ; 0 "" 2
X 1181 /* #NOAPP */
X 1182 .LBE316:
X 1183 .LBE315:
X 1184 .LBB317:
X 1185 .LBB318:
X 1186 .LBB319:
X 1187 .LBB320:
X 1188 .LSM186:
X 1189 00ce 2093 F100 sts 241,r18
X 1190 .LBE320:
X 1191 .LBE319:
X 1192 .LBB321:
X 1193 .LBB322:
X 1194 00d2 3093 F100 sts 241,r19
X 1195 .LVL38:
X 1196 .LBE322:
X 1197 .LBE321:
X 1198 .LBB323:
X 1199 .LBB324:
X 1200 00d6 4093 F100 sts 241,r20
X 1201 .LVL39:
X 1202 .LBE324:
X 1203 .LBE323:
X 1204 .LBB325:
X 1205 .LBB326:
X 1206 .LSM187:
X 1207 00da 2091 F300 lds r18,243
X 1208 .LVL40:
X 1209 00de 8091 F200 lds r24,242
X 1210 .LBE326:
X 1211 .LBE325:
X 1212 .LSM188:
X 1213 00e2 D22E mov r13,r18
X 1214 00e4 CC24 clr r12
X 1215 00e6 90E0 ldi r25,lo8(0)
X 1216 00e8 8C29 or r24,r12
X 1217 00ea 9D29 or r25,r13
X 1218 00ec 2091 0000 lds r18,Microphone_Audio_Interface+2
X 1219 00f0 3091 0000 lds r19,(Microphone_Audio_Interface+2)+1
X 1220 00f4 8217 cp r24,r18
X 1221 00f6 9307 cpc r25,r19
X 1222 00f8 01F4 brne .L85
X 1223 .LBB327:
X 1224 .LBB328:
X 1225 .LSM189:
X 1226 00fa 8091 E800 lds r24,232
X 1227 00fe 8E77 andi r24,lo8(126)
X 1228 0100 8093 E800 sts 232,r24
X 1229 .L85:
X 1230 .LBE328:
X 1231 .LBE327:
X 1232 .LBE318:
X 1233 .LBE317:
X 1234 .LBE314:
X 1235 .LBB313:
X 1236 .LBB340:
X 1237 .LSM190:
X 1238 0104 6770 andi r22,lo8(7)
X 1239 .LBE340:
X 1240 .LBE313:
X 1241 .LBB311:
X 1242 .LBB312:
X 1243 .LSM191:
X 1244 0106 6093 E900 sts 233,r22
X 1245 .LBE312:
X 1246 .LBE311:
X 1247 .LBE310:
X 1248 .LSM192:
X 1249 010a 8091 0000 lds r24,timer_count
X 1250 010e 8823 tst r24
X 1251 0110 01F4 brne .L87
X 1252 .LBB342:
X 1253 .LBB343:
X 1254 .LSM193:
X 1255 0112 7698 cbi 46-32,6
X 1256 .LBE343:
X 1257 .LBE342:
X 1258 .LSM194:
X 1259 /* #APP */
X 1260 ; 368 "AudioInput.c" 1
X 1261 0114 F894 cli
X 1262 ; 0 "" 2
X 1263 .LSM195:
X 1264 /* #NOAPP */
X 1265 0116 8091 0000 lds r24,rf_channel
X 1266 011a 8F5F subi r24,lo8(-(1))
X 1267 011c 8093 0000 sts rf_channel,r24
X 1268 0120 8335 cpi r24,lo8(83)
X 1269 0122 01F4 brne .L88
X 1270 0124 1092 0000 sts rf_channel,__zero_reg__
X 1271 .L88:
X 1272 .LSM196:
X 1273 0128 8091 0000 lds r24,rf_channel
X 1274 012c 0E94 0000 call set_channel
X 1275 .LVL41:
X 1276 .LBB344:
X 1277 .LBB305:
X 1278 .LSM197:
X 1279 /* #APP */
X 1280 ; 112 "AudioInput.c" 1
X 1281 0130 F894 cli
X 1282 ; 0 "" 2
X 1283 .LSM198:
X 1284 /* #NOAPP */
X 1285 0132 8092 0000 sts timer_count,r8
X 1286 .LSM199:
X 1287 /* #APP */
X 1288 ; 114 "AudioInput.c" 1
X 1289 0136 7894 sei
X 1290 ; 0 "" 2
X 1291 /* #NOAPP */
X 1292 .LBE305:
X 1293 .LBE344:
X 1294 .LSM200:
X 1295 /* #APP */
X 1296 ; 372 "AudioInput.c" 1
X 1297 0138 7894 sei
X 1298 ; 0 "" 2
X 1299 /* #NOAPP */
X 1300 .LBB345:
X 1301 .LBB346:
X 1302 .LSM201:
X 1303 013a 769A sbi 46-32,6
X 1304 .LVL42:
X 1305 .L87:
X 1306 .LBE346:
X 1307 .LBE345:
X 1308 .LSM202:
X 1309 013c 0F5F subi r16,lo8(-(1))
X 1310 013e 1F4F sbci r17,hi8(-(1))
X 1311 0140 83E0 ldi r24,hi8(1000)
X 1312 0142 083E cpi r16,lo8(1000)
X 1313 0144 1807 cpc r17,r24
X 1314 0146 01F0 breq .+2
X 1315 0148 00C0 rjmp .L89
X 1316 .LBB347:
X 1317 .LSM203:
X 1318 014a F090 0000 lds r15,switches
X 1319 .LVL43:
X 1320 .LSM204:
X 1321 014e 1091 0000 lds r17,switches
X 1322 0152 8091 0000 lds r24,oldswitches
X 1323 0156 1827 eor r17,r24
X 1324 .LSM205:
X 1325 0158 01F4 brne .L90
X 1326 .L95:
X 1327 015a 70E0 ldi r23,lo8(old_adc_val)
X 1328 015c E72E mov r14,r23
X 1329 015e 70E0 ldi r23,hi8(old_adc_val)
X 1330 0160 F72E mov r15,r23
X 1331 0162 00E0 ldi r16,lo8(0)
X 1332 0164 10E0 ldi r17,hi8(0)
X 1333 .LVL44:
X 1334 0166 00C0 rjmp .L91
X 1335 .LVL45:
X 1336 .L90:
X 1337 .LSM206:
X 1338 0168 F092 0000 sts oldswitches,r15
X 1339 016c 00E5 ldi r16,lo8(80)
X 1340 .LVL46:
X 1341 .L96:
X 1342 .LSM207:
X 1343 016e 10FF sbrs r17,0
X 1344 0170 00C0 rjmp .L92
X 1345 .LBB308:
X 1346 .LSM208:
X 1347 0172 F0FC sbrc r15,0
X 1348 0174 00C0 rjmp .L93
X 1349 0176 90E0 ldi r25,lo8(0)
X 1350 0178 00C0 rjmp .L94
X 1351 .L93:
X 1352 017a 9FE7 ldi r25,lo8(127)
X 1353 .L94:
X 1354 017c 8BE0 ldi r24,lo8(11)
X 1355 017e 8983 std Y+1,r24
X 1356 0180 9A82 std Y+2,r9
X 1357 0182 0B83 std Y+3,r16
X 1358 0184 9C83 std Y+4,r25
X 1359 .LSM209:
X 1360 0186 80E0 ldi r24,lo8(Keyboard_MIDI_Interface)
X 1361 0188 90E0 ldi r25,hi8(Keyboard_MIDI_Interface)
X 1362 018a B501 movw r22,r10
X 1363 018c 0E94 0000 call MIDI_Device_SendEventPacket
X 1364 .LVL47:
X 1365 .L92:
X 1366 0190 0F5F subi r16,lo8(-(1))
X 1367 .LBE308:
X 1368 .LSM210:
X 1369 0192 0435 cpi r16,lo8(84)
X 1370 0194 01F0 breq .L95
X 1371 .LSM211:
X 1372 0196 1695 lsr r17
X 1373 .LSM212:
X 1374 0198 F694 lsr r15
X 1375 019a 00C0 rjmp .L96
X 1376 .LVL48:
X 1377 .L91:
X 1378 .LSM213:
X 1379 019c F801 movw r30,r16
X 1380 019e E050 subi r30,lo8(-(adc_val))
X 1381 01a0 F040 sbci r31,hi8(-(adc_val))
X 1382 01a2 E081 ld r30,Z
X 1383 .LVL49:
X 1384 .LSM214:
X 1385 01a4 2E2F mov r18,r30
X 1386 01a6 30E0 ldi r19,lo8(0)
X 1387 .LVL50:
X 1388 01a8 D701 movw r26,r14
X 1389 01aa 8C91 ld r24,X
X 1390 01ac 9927 clr r25
X 1391 01ae 87FD sbrc r24,7
X 1392 01b0 9095 com r25
X 1393 01b2 2817 cp r18,r24
X 1394 01b4 3907 cpc r19,r25
X 1395 01b6 01F0 breq .L97
X 1396 .LVL51:
X 1397 .LBB309:
X 1398 .LSM215:
X 1399 01b8 EC93 st X,r30
X 1400 .LSM216:
X 1401 01ba 8BE0 ldi r24,lo8(11)
X 1402 01bc 8983 std Y+1,r24
X 1403 01be 9A82 std Y+2,r9
X 1404 01c0 802F mov r24,r16
X 1405 01c2 805F subi r24,lo8(-(16))
X 1406 01c4 8B83 std Y+3,r24
X 1407 01c6 EC83 std Y+4,r30
X 1408 .LSM217:
X 1409 01c8 80E0 ldi r24,lo8(Keyboard_MIDI_Interface)
X 1410 01ca 90E0 ldi r25,hi8(Keyboard_MIDI_Interface)
X 1411 01cc B501 movw r22,r10
X 1412 01ce 0E94 0000 call MIDI_Device_SendEventPacket
X 1413 .LVL52:
X 1414 .L97:
X 1415 01d2 0F5F subi r16,lo8(-(1))
X 1416 01d4 1F4F sbci r17,hi8(-(1))
X 1417 01d6 0894 sec
X 1418 01d8 E11C adc r14,__zero_reg__
X 1419 01da F11C adc r15,__zero_reg__
X 1420 .LBE309:
X 1421 .LSM218:
X 1422 01dc 0430 cpi r16,4
X 1423 01de 1105 cpc r17,__zero_reg__
X 1424 01e0 01F4 brne .L91
X 1425 .LSM219:
X 1426 01e2 80E0 ldi r24,lo8(Keyboard_MIDI_Interface)
X 1427 01e4 90E0 ldi r25,hi8(Keyboard_MIDI_Interface)
X 1428 01e6 0E94 0000 call MIDI_Device_Flush
X 1429 .LVL53:
X 1430 .LSM220:
X 1431 01ea 80E0 ldi r24,lo8(Keyboard_MIDI_Interface)
X 1432 01ec 90E0 ldi r25,hi8(Keyboard_MIDI_Interface)
X 1433 01ee 0E94 0000 call MIDI_Device_USBTask
X 1434 01f2 00E0 ldi r16,lo8(0)
X 1435 01f4 10E0 ldi r17,hi8(0)
X 1436 .LVL54:
X 1437 .L89:
X 1438 .LBE347:
X 1439 .LSM221:
X 1440 01f6 0E94 0000 call USB_USBTask
X 1441 .LVL55:
X 1442 01fa 00C0 rjmp .L98
X 1443 .L102:
X 1444 .LBB348:
X 1445 .LBB341:
X 1446 .LBB335:
X 1447 .LSM222:
X 1448 01fc 8091 0000 lds r24,USB_DeviceState
X 1449 0200 8430 cpi r24,lo8(4)
X 1450 0202 01F0 breq .+2
X 1451 0204 00C0 rjmp .L85
X 1452 0206 00C0 rjmp .L104
X 1453 .LBE335:
X 1454 .LBE341:
X 1455 .LBE348:
X 1456 .LFE115:
X 1458 .global Microphone_Audio_Interface
X 1459 .data
X 1462 Microphone_Audio_Interface:
X 1463 0000 01 .byte 1
X 1464 0001 01 .byte 1
X 1465 0002 FC00 .word 252
X 1466 0004 0000 00 .skip 3,0
X 1467 0007 00 .skip 1,0
X 1468 .global Keyboard_MIDI_Interface
X 1471 Keyboard_MIDI_Interface:
X 1472 0008 02 .byte 2
X 1473 0009 03 .byte 3
X 1474 000a 4000 .word 64
X 1475 000c 00 .byte 0
X 1476 000d 02 .byte 2
X 1477 000e 4000 .word 64
X 1478 0010 00 .byte 0
X 1479 .global timer_count
X 1480 .global timer_count
X 1481 .section .bss
X 1484 timer_count:
X 1485 0000 00 .skip 1,0
X 1486 .global overrun_count
X 1487 .global overrun_count
X 1490 overrun_count:
X 1491 0001 00 .skip 1,0
X 1492 .global packet_lost_count
X 1493 .global packet_lost_count
X 1496 packet_lost_count:
X 1497 0002 00 .skip 1,0
X 1498 .global packet_rcvd_count
X 1499 .global packet_rcvd_count
X 1502 packet_rcvd_count:
X 1503 0003 00 .skip 1,0
X 1504 .global abuf_wptr
X 1505 .global abuf_wptr
X 1508 abuf_wptr:
X 1509 0004 00 .skip 1,0
X 1510 .global abuf_rptr
X 1511 .global abuf_rptr
X 1514 abuf_rptr:
X 1515 0005 00 .skip 1,0
X 1516 .global abuf_overrun
X 1517 .global abuf_overrun
X 1520 abuf_overrun:
X 1521 0006 00 .skip 1,0
X 1522 .global rf_channel
X 1523 .global rf_channel
X 1526 rf_channel:
X 1527 0007 00 .skip 1,0
X 1528 .global switches
X 1529 .global switches
X 1532 switches:
X 1533 0008 00 .skip 1,0
X 1534 .global oldswitches
X 1535 .global oldswitches
X 1538 oldswitches:
X 1539 0009 00 .skip 1,0
X 1540 .global adc_val
X 1541 .global adc_val
X 1544 adc_val:
X 1545 000a 0000 0000 .skip 4,0
X 1546 .global old_adc_val
X 1547 .global old_adc_val
X 1550 old_adc_val:
X 1551 000e 0000 0000 .skip 4,0
X 1552 .section .progmem.data,"a",@progbits
X 1555 cmd_flush_tx:
X 1556 0000 E1 .byte -31
X 1557 0001 00 .byte 0
X 1560 cmd_flush_rx:
X 1561 0002 E2 .byte -30
X 1562 0003 00 .byte 0
X 1563 .lcomm old_pkt_nr.3828,1
X 1564 .comm abuf,256,1
X 1669 .Letext0:
DEFINED SYMBOLS
X *ABS*:00000000 AudioInput.c
X /tmp/cci2g1xw.s:2 *ABS*:0000003f __SREG__
X /tmp/cci2g1xw.s:3 *ABS*:0000003e __SP_H__
X /tmp/cci2g1xw.s:4 *ABS*:0000003d __SP_L__
X /tmp/cci2g1xw.s:5 *ABS*:00000034 __CCP__
X /tmp/cci2g1xw.s:6 *ABS*:00000000 __tmp_reg__
X /tmp/cci2g1xw.s:7 *ABS*:00000001 __zero_reg__
X /tmp/cci2g1xw.s:19 .text.__vector_17:00000000 __vector_17
X /tmp/cci2g1xw.s:1484 .bss:00000000 timer_count
X /tmp/cci2g1xw.s:51 .text.__vector_32:00000000 __vector_32
X /tmp/cci2g1xw.s:1490 .bss:00000001 overrun_count
X /tmp/cci2g1xw.s:1496 .bss:00000002 packet_lost_count
X /tmp/cci2g1xw.s:1502 .bss:00000003 packet_rcvd_count
X /tmp/cci2g1xw.s:117 .text.beep:00000000 beep
X /tmp/cci2g1xw.s:224 .text.show_error:00000000 show_error
X /tmp/cci2g1xw.s:327 .text.__vector_1:00000000 __vector_1
X .bss:00000012 old_pkt_nr.3828
X /tmp/cci2g1xw.s:1508 .bss:00000004 abuf_wptr
X /tmp/cci2g1xw.s:1514 .bss:00000005 abuf_rptr
X *COM*:00000100 abuf
X /tmp/cci2g1xw.s:1532 .bss:00000008 switches
X /tmp/cci2g1xw.s:1544 .bss:0000000a adc_val
X /tmp/cci2g1xw.s:760 .text.EVENT_USB_Device_Disconnect:00000000 EVENT_USB_Device_Disconnect
X /tmp/cci2g1xw.s:781 .text.EVENT_USB_Device_ControlRequest:00000000 EVENT_USB_Device_ControlRequest
X /tmp/cci2g1xw.s:1462 .data:00000000 Microphone_Audio_Interface
X /tmp/cci2g1xw.s:798 .text.EVENT_USB_Device_ConfigurationChanged:00000000 EVENT_USB_Device_ConfigurationChanged
X /tmp/cci2g1xw.s:1471 .data:00000008 Keyboard_MIDI_Interface
X /tmp/cci2g1xw.s:819 .text.EVENT_USB_Device_Connect:00000000 EVENT_USB_Device_Connect
X /tmp/cci2g1xw.s:1555 .progmem.data:00000000 cmd_flush_tx
X /tmp/cci2g1xw.s:1560 .progmem.data:00000002 cmd_flush_rx
X /tmp/cci2g1xw.s:917 .text.SetupHardware:00000000 SetupHardware
X /tmp/cci2g1xw.s:1000 .text.main:00000000 main
X /tmp/cci2g1xw.s:1526 .bss:00000007 rf_channel
X /tmp/cci2g1xw.s:1538 .bss:00000009 oldswitches
X /tmp/cci2g1xw.s:1550 .bss:0000000e old_adc_val
X /tmp/cci2g1xw.s:1520 .bss:00000006 abuf_overrun
X
UNDEFINED SYMBOLS
Audio_Device_ProcessControlRequest
Audio_Device_ConfigureEndpoints
MIDI_Device_ConfigureEndpoints
write_pcmd
switch_to_rx_mode
rfm70_init
USB_Init
set_channel
MIDI_Device_SendEventPacket
MIDI_Device_Flush
MIDI_Device_USBTask
USB_USBTask
USB_DeviceState
__do_copy_data
__do_clear_bss
SHAR_EOF
(set 20 11 01 15 14 57 21 'rx/AudioInput.lst'
eval "${shar_touch}") && \
chmod 0644 'rx/AudioInput.lst'
if test $? -ne 0
then ${echo} "restore of rx/AudioInput.lst failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'rx/AudioInput.lst': 'MD5 check failed'
) << \SHAR_EOF
cc5cff9077f6997ca93bee6845360c1f rx/AudioInput.lst
SHAR_EOF
else
test `LC_ALL=C wc -c < 'rx/AudioInput.lst'` -ne 53446 && \
${echo} "restoration warning: size of 'rx/AudioInput.lst' is not 53446"
fi
fi
# ============= rx/byte_select.h ==============
if test -f 'rx/byte_select.h' && test "$first_param" != -c; then
${echo} "x - SKIPPING rx/byte_select.h (file already exists)"
else
${echo} "x - extracting rx/byte_select.h (text)"
sed 's/^X//' << 'SHAR_EOF' > 'rx/byte_select.h' &&
/*
X The code below is published as PUBLIC DOMAIN as Wojciech M. Zabolotny
X ( wzab<at>ise.pw.edu.pl ) 2011.01.11
X No warranty of any kind is provided! Use at your own risk!
*/
#ifndef _BYTE_SELECT_H_
#define _BYTE_SELECT_
#define byte_select(v) \
X ((uint8_t *) &v)
__attribute__ ((always_inline))
static inline uint8_t uint32_b0(uint32_t v)
{
X union {
X uint32_t i;
X uint8_t b[4];
X } tmp;
X tmp.i = v;
X return tmp.b[0];
}
__attribute__ ((always_inline))
static inline uint8_t uint32_b1(uint32_t v)
{
X union {
X uint32_t i;
X uint8_t b[4];
X } tmp;
X tmp.i = v;
X return tmp.b[1];
}
__attribute__ ((always_inline))
static inline uint8_t uint32_b2(uint32_t v)
{
X union {
X uint32_t i;
X uint8_t b[4];
X } tmp;
X tmp.i = v;
X return tmp.b[2];
}
__attribute__ ((always_inline))
static inline uint8_t uint32_b3(uint32_t v)
{
X union {
X uint32_t i;
X uint8_t b[4];
X } tmp;
X tmp.i = v;
X return tmp.b[3];
}
#endif
SHAR_EOF
(set 20 11 01 15 14 47 38 'rx/byte_select.h'
eval "${shar_touch}") && \
chmod 0644 'rx/byte_select.h'
if test $? -ne 0
then ${echo} "restore of rx/byte_select.h failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'rx/byte_select.h': 'MD5 check failed'
) << \SHAR_EOF
a30a086c55794c17bfcedefd81df0cbb rx/byte_select.h
SHAR_EOF
else
test `LC_ALL=C wc -c < 'rx/byte_select.h'` -ne 936 && \
${echo} "restoration warning: size of 'rx/byte_select.h' is not 936"
fi
fi
# ============= customize.h ==============
if test -f 'customize.h' && test "$first_param" != -c; then
${echo} "x - SKIPPING customize.h (file already exists)"
else
${echo} "x - extracting customize.h (text)"
sed 's/^X//' << 'SHAR_EOF' > 'customize.h' &&
/*
X The code below is published as PUBLIC DOMAIN as Wojciech M. Zabolotny
X ( wzab<at>ise.pw.edu.pl ) 2011.01.11
X No warranty of any kind is provided! Use at your own risk!
*/
/*
X When you compile the firmware for another set of Rx/Tx, you should set the set number
X here (0x00-0xff) and the initial channel (0x00-0x52)
X */
#ifndef _CUSTOMIZE_H_
#define _CUSTOMIZE_H_
#define SET_NUMBER 0x30
#define INITIAL_CHANNEL 0x50
#endif
SHAR_EOF
(set 20 11 01 15 14 44 23 'customize.h'
eval "${shar_touch}") && \
chmod 0644 'customize.h'
if test $? -ne 0
then ${echo} "restore of customize.h failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'customize.h': 'MD5 check failed'
) << \SHAR_EOF
dcda070cc8a6854da67568d90fec1d5b customize.h
SHAR_EOF
else
test `LC_ALL=C wc -c < 'customize.h'` -ne 433 && \
${echo} "restoration warning: size of 'customize.h' is not 433"
fi
fi
# ============= tx_adc/Makefile ==============
if test ! -d 'tx_adc'; then
mkdir 'tx_adc'
if test $? -eq 0
then ${echo} "x - created directory tx_adc."
else ${echo} "x - failed to create directory tx_adc."
exit 1
fi
fi
if test -f 'tx_adc/Makefile' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx_adc/Makefile (file already exists)"
else
${echo} "x - extracting tx_adc/Makefile (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx_adc/Makefile' &&
# Hey Emacs, this is a -*- makefile -*-
X
# AVR-GCC Makefile template, derived from the WinAVR template (which
# is public domain), believed to be neutral to any flavor of "make"
# (GNU make, BSD make, SysV make)
X
X
MCU = atmega88
F_CPU = 18432
#MCU = attiny45
FORMAT = ihex
TARGET = adc
SRC = $(TARGET).c rfm70.c
ASRC = SPI_isr.S
OPT = s
X
# Name of this Makefile (used for "make depend").
MAKEFILE = Makefile
X
# Compiler flag to set the C Standard level.
# c89 - "ANSI" C
# gnu89 - c89 plus GCC extensions
# c99 - ISO C99 standard (not yet fully implemented)
# gnu99 - c99 plus GCC extensions
CSTANDARD = -std=gnu99
X
# Place -D or -U options here
CDEFS =
X
# Place -I options here
CINCS =
X
X
CDEBUG = -g
CWARN = -Wall -Wstrict-prototypes
CTUNING = -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
#CEXTRA = -Wa,-adhlns=$(<:.c=.lst)
CFLAGS = $(CDEBUG) $(CDEFS) $(CINCS) -O$(OPT) $(CWARN) $(CSTANDARD) $(CEXTRA)
X
X
#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
X
X
#Additional libraries.
X
# Minimalistic printf version
PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
X
# Floating point printf version (requires MATH_LIB = -lm below)
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
X
PRINTF_LIB =
X
# Minimalistic scanf version
SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
X
# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
X
SCANF_LIB =
X
MATH_LIB = -lm
X
# External memory options
X
# 64 KB of external RAM, starting after internal RAM (ATmega128!),
# used for variables (.data/.bss) and heap (malloc()).
#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
X
# 64 KB of external RAM, starting after internal RAM (ATmega128!),
# only used for heap (malloc()).
#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
X
EXTMEMOPTS =
X
#LDMAP = $(LDFLAGS) -Wl,-Map=$(TARGET).map,--cref
LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
X
X
# Programming support using avrdude. Settings and variables.
X
AVRDUDE_PROGRAMMER = stk500v2
AVRDUDE_PORT = /dev/cuaa1
X
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
X
X
# Uncomment the following if you want avrdude's erase cycle counter.
# Note that this counter needs to be initialized first using -Yn,
# see avrdude manual.
#AVRDUDE_ERASE_COUNTER = -y
X
# Uncomment the following if you do /not/ wish a verification to be
# performed after programming the device.
#AVRDUDE_NO_VERIFY = -V
X
# Increase verbosity level. Please use this when submitting bug
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
# to submit bug reports.
#AVRDUDE_VERBOSE = -v -v
X
AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) $(AVRDUDE_ERASE_COUNTER)
X
X
CC = avr-gcc
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size
NM = avr-nm
AVRDUDE = avrdude
REMOVE = rm -f
MV = mv -f
X
# Define all object files.
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
X
# Define all listing files.
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)
X
# Combine all necessary flags and optional flags.
# Add target processor to flags.
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
X
X
# Default target.
all: build
X
build: elf hex eep
X
elf: $(TARGET).elf
hex: $(TARGET).hex
eep: $(TARGET).eep
lss: $(TARGET).lss
sym: $(TARGET).sym
X
X
# Program the device.
program: $(TARGET).hex $(TARGET).eep
X $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
X
X
X
X
# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
COFFCONVERT=$(OBJCOPY) --debugging \
--change-section-address .data-0x800000 \
--change-section-address .bss-0x800000 \
--change-section-address .noinit-0x800000 \
--change-section-address .eeprom-0x810000
X
X
coff: $(TARGET).elf
X $(COFFCONVERT) -O coff-avr $(TARGET).elf $(TARGET).cof
X
X
extcoff: $(TARGET).elf
X $(COFFCONVERT) -O coff-ext-avr $(TARGET).elf $(TARGET).cof
X
X
X.SUFFIXES: .elf .hex .eep .lss .sym
X
X.elf.hex:
X $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
X
X.elf.eep:
X -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
X --change-section-lma .eeprom=0 -O $(FORMAT) $< $@
X
# Create extended listing file from ELF output file.
X.elf.lss:
X $(OBJDUMP) -h -S -z $< > $@
X
# Create a symbol table from ELF output file.
X.elf.sym:
X $(NM) -n $< > $@
X
X
X
# Link: create ELF output file from object files.
$(TARGET).elf: $(OBJ)
X $(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)
X
X
# Compile: create object files from C source files.
X.c.o:
X $(CC) -c $(ALL_CFLAGS) $< -o $@
X
X
# Compile: create assembler files from C source files.
X.c.s:
X $(CC) -S $(ALL_CFLAGS) $< -o $@
X
X
# Assemble: create object files from assembler source files.
X.S.o:
X $(CC) -c $(ALL_ASFLAGS) $< -o $@
X
X
X
# Target: clean project.
clean:
X $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).cof $(TARGET).elf \
X $(TARGET).map $(TARGET).sym $(TARGET).lss \
X $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d)
X
depend:
X if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \
X then \
X sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \
X $(MAKEFILE).$$$$ && \
X $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \
X fi
X echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \
X >> $(MAKEFILE); \
X $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE)
X
X.PHONY: all build elf hex eep lss sym program coff extcoff clean depend
X
X
SHAR_EOF
(set 20 11 01 11 19 01 18 'tx_adc/Makefile'
eval "${shar_touch}") && \
chmod 0644 'tx_adc/Makefile'
if test $? -ne 0
then ${echo} "restore of tx_adc/Makefile failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx_adc/Makefile': 'MD5 check failed'
) << \SHAR_EOF
a6eac26d6a74cef290b12abf6fdd9f4a tx_adc/Makefile
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx_adc/Makefile'` -ne 5458 && \
${echo} "restoration warning: size of 'tx_adc/Makefile' is not 5458"
fi
fi
# ============= tx_adc/spi_atmega88.h ==============
if test ! -d 'tx_adc'; then
mkdir 'tx_adc'
if test $? -eq 0
then ${echo} "x - created directory tx_adc."
else ${echo} "x - failed to create directory tx_adc."
exit 1
fi
fi
if test -f 'tx_adc/spi_atmega88.h' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx_adc/spi_atmega88.h (file already exists)"
else
${echo} "x - extracting tx_adc/spi_atmega88.h (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx_adc/spi_atmega88.h' &&
/*
X The code below is published as PUBLIC DOMAIN as Wojciech M. Zabolotny
X ( wzab<at>ise.pw.edu.pl ) 2011.01.11
X No warranty of any kind is provided! Use at your own risk!
*/
X
#ifndef _SPI_ATMEGA88_H_
#define _SPI_ATMEGA88_H_
X #define DDR_SPI_SCK DDRB
X #define PINS_SPI_SCK PINB
X #define PIN_NR_SPI_SCK 5
X
X #define DDR_SPI_SS DDRB
X #define PINS_SPI_SS PINB
X #define PIN_NR_SPI_SS 2
X
X #define DDR_SPI_MOSI DDRB
X #define PINS_SPI_MOSI PINB
X #define PIN_NR_SPI_MOSI 3
#endif
SHAR_EOF
(set 20 11 01 15 14 38 31 'tx_adc/spi_atmega88.h'
eval "${shar_touch}") && \
chmod 0644 'tx_adc/spi_atmega88.h'
if test $? -ne 0
then ${echo} "restore of tx_adc/spi_atmega88.h failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx_adc/spi_atmega88.h': 'MD5 check failed'
) << \SHAR_EOF
bb247db021baae9469174f326b2d921f tx_adc/spi_atmega88.h
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx_adc/spi_atmega88.h'` -ne 485 && \
${echo} "restoration warning: size of 'tx_adc/spi_atmega88.h' is not 485"
fi
fi
# ============= tx_adc/rfm70.c ==============
if test -f 'tx_adc/rfm70.c' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx_adc/rfm70.c (file already exists)"
else
${echo} "x - extracting tx_adc/rfm70.c (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx_adc/rfm70.c' &&
/*
X The code below is based on the PIC demo code for RFM70
X provided by HOPE RF.
X I (Wojciech M. Zabolotny wzab<at>ise.pw.edu.pl) have modified it
X for AVR.
X All my modifications are PUBLIC DOMAIN.
X */
#include "rfm70.h"
#include "../customize.h"
static PROGMEM uint8_t set1[][4]={
X {0x40, 0x4b, 0x01, 0xe2},
X {0xc0, 0x4b, 0x00, 0x00},
X {0xd0, 0xfc, 0x8c, 0x02},
X {0x99, 0x00, 0x39, 0x41},
X {0xd9, 0x9e, 0x86, 0x0b},// #?? d9 czy f9?
X {0x24, 0x06, 0x7f, 0xa6},
X {0x00, 0x00, 0x00, 0x00},
X {0x00, 0x00, 0x00, 0x00},
X {0x00, 0x00, 0x00, 0x00},
X {0x00, 0x00, 0x00, 0x00},
X {0x00, 0x00, 0x00, 0x00},
X {0x00, 0x00, 0x00, 0x00},
X {0x00, 0x12, 0x73, 0x00},
X {0x36, 0xB4, 0x80, 0x00},
};
static PROGMEM uint8_t set1_14[]={0x41,0x20,0x08,0x04,0x81,0x20,0xCF,0xF7,0xFE,0xFF,0xFF};
static PROGMEM uint8_t set0[][2]={
X {0,0x0F}, //reflect RX_DR\TX_DS\MAX_RT,Enable CRC ,2byte,POWER UP,PRX
X {1,0x00}, //No autoacknowledge! Was:{1,0x3F}, //Enable auto acknowledgement data pipe5\4\3\2\1\0
X {2,0x01}, //Enable only RX pipe 0 //Enable RX Addresses pipe5\4\3\2\1\0
X {3,0x01}, //RX/TX address field width 3 bytes
X {4,0x00}, //no retransmission! Was: {4,0xff}, //auto retransmission dalay (4000us),auto retransmission count(15)
X {5,INITIAL_CHANNEL}, //(5,0x17), #32 channel
X {6,0x3f}, //6,0x17), #air data rate-1M,out power 0dbm,setup LNA gain
X {7,0x07}, //
X {8,0x00}, //
X {9,0x00}, //
X {12,0xc3},// only LSB Receive address data pipe 2, MSB bytes is equal to RX_ADDR_P1[39:8]
X {13,0xc4},// only LSB Receive address data pipe 3, MSB bytes is equal to RX_ADDR_P1[39:8]
X {14,0xc5},// only LSB Receive address data pipe 4, MSB bytes is equal to RX_ADDR_P1[39:8]
X {15,0xc6},// only LSB Receive address data pipe 5, MSB bytes is equal to RX_ADDR_P1[39:8]
X {17,0x20},// Number of bytes in RX payload in data pipe0(32 byte)
X {18,0x20},// Number of bytes in RX payload in data pipe1(32 byte)
X {19,0x20},// Number of bytes in RX payload in data pipe2(32 byte)
X {20,0x20},// Number of bytes in RX payload in data pipe3(32 byte)
X {21,0x20},// Number of bytes in RX payload in data pipe4(32 byte)
X {22,0x20},// Number of bytes in RX payload in data pipe5(32 byte)
X {23,0x00},// fifo status
X {28,0x00},// No dynamic payload length! {28,0x3F},// Enable dynamic payload length data pipe5\4\3\2\1\0
X {29,0x07},// Enables Dynamic Payload Length,Enables Payload with ACK,Enables the W_TX_PAYLOAD_NOACK command
};
static PROGMEM uint8_t cmd_activate[]={0x50,0x73};
static PROGMEM uint8_t cmd_tog1[]={0xd9 | 0x06, 0x9e, 0x86, 0x0b}; //assosciated with set1[4]!
static PROGMEM uint8_t cmd_tog2[]={0xd9 & ~0x06, 0x9e, 0x86, 0x0b};
static PROGMEM uint8_t cmd_flush_rx[]={0xe2,0x00};
static PROGMEM uint8_t cmd_flush_tx[]={0xe1,0x00};
static PROGMEM uint8_t cmd_switch_cfg[]={0x50,0x53};
X
static PROGMEM uint8_t adr0[]={SET_NUMBER,'W','G'};
//static PROGMEM uint8_t adr1[]={SET_NUMBER,'W','G'};
X
uint8_t USART_SPI_Transfer(uint8_t c);
X
X
void write_pcmd(uint8_t * cmd, uint8_t len)
{
X set_cs(1);
X set_cs(0);
X while(len--) {
X USART_SPI_Transfer(pgm_read_byte(cmd++));
X };
X set_cs(1);
}
X
void write_reg(uint8_t reg, uint8_t val)
{
X set_cs(1);
X set_cs(0);
X USART_SPI_Transfer(reg | 0x20);
X USART_SPI_Transfer(val);
X set_cs(1);
}
X
void switch_cfg(uint8_t cnum)
{
X uint8_t tmp = read_reg(0x07) & 0x80;
X if(cnum) {
X if(!tmp)
X write_pcmd(cmd_switch_cfg,sizeof(cmd_switch_cfg));
X } else {
X if(tmp)
X write_pcmd(cmd_switch_cfg,sizeof(cmd_switch_cfg));
X }
}
X
void switch_to_rx_mode(void)
{
X uint8_t val;
X write_pcmd(cmd_flush_rx,sizeof(cmd_flush_rx));
X val = read_reg(0x07);
X write_reg(0x07,val);
X set_ce(0);
X val=read_reg(0x00);
X val |= 0x01;
X write_reg(0x00,val);
X set_ce(1);
}
X
void switch_to_tx_mode(void)
{
X uint8_t val;
X write_pcmd(cmd_flush_tx,sizeof(cmd_flush_tx));
X set_ce(0);
X val=read_reg(0x00);
X val &= ~0x01;
X write_reg(0x00,val);
X set_ce(1);
}
X
void set_channel(uint8_t cnum)
{
X write_reg(5, cnum);
}
X
X
void write_reg_pbuf(uint8_t reg, uint8_t * buf, uint8_t len)
{
X set_cs(1);
X set_cs(0);
X USART_SPI_Transfer(reg | 0x20);
X while(len--)
X USART_SPI_Transfer(pgm_read_byte(buf++));
X set_cs(1);
}
X
uint8_t send_packet(uint8_t * data, uint8_t len)
{
X uint8_t status;
X switch_to_tx_mode();
X status = read_reg(0x17); //FIFO_STATUS
X if (status & 0x20) return 0xff; //Error?
X set_cs(0);
X USART_SPI_Transfer(0xb0);
X while(len--) {
X USART_SPI_Transfer(*(data++));
X }
X set_cs(1);
X return 0;
}
X
void rfm70_init(uint8_t channel)
{
X uint8_t i;
X switch_cfg(0);
X for(i=0;i<20;i++) {
X write_reg(pgm_read_byte(&set0[i][0]),pgm_read_byte(&set0[i][1]));
X }
X write_reg_pbuf(10,adr0,sizeof(adr0));
X //write_reg_pbuf(11,adr1,sizeof(adr1)); // PIPE 1 not used!
X write_reg_pbuf(16,adr0,sizeof(adr0));
X set_channel(channel);
X if(!read_reg(29))
X write_pcmd(cmd_activate,sizeof(cmd_activate));
X write_reg(pgm_read_byte(&set0[22][0]),pgm_read_byte(&set0[22][1]));
X write_reg(pgm_read_byte(&set0[21][0]),pgm_read_byte(&set0[21][1]));
X switch_cfg(1);
X for(i=0;i<14;i++) {
X write_reg_pbuf(i,set1[i],sizeof(set1[i]));
X }
X write_reg_pbuf(14,set1_14,sizeof(set1_14));
X write_reg_pbuf(4,cmd_tog1,sizeof(cmd_tog1));
X write_reg_pbuf(4,cmd_tog2,sizeof(cmd_tog2));
X //delay 50 ms
X _delay_ms(50);
X switch_cfg(0);
X switch_to_rx_mode();
}
X
X
SHAR_EOF
(set 20 11 01 14 21 15 37 'tx_adc/rfm70.c'
eval "${shar_touch}") && \
chmod 0644 'tx_adc/rfm70.c'
if test $? -ne 0
then ${echo} "restore of tx_adc/rfm70.c failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx_adc/rfm70.c': 'MD5 check failed'
) << \SHAR_EOF
701cd04a32ff5ddc0b9cbe5cdc9c0482 tx_adc/rfm70.c
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx_adc/rfm70.c'` -ne 5319 && \
${echo} "restoration warning: size of 'tx_adc/rfm70.c' is not 5319"
fi
fi
# ============= tx_adc/rfm70.h ==============
if test -f 'tx_adc/rfm70.h' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx_adc/rfm70.h (file already exists)"
else
${echo} "x - extracting tx_adc/rfm70.h (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx_adc/rfm70.h' &&
#ifndef _RFM70_H_
#define _RFM70_H_
X
#define F_CPU 8000000
X
X
/* Includes: */
#include <ctype.h>
#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/power.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include "usart_spi_atmega88.h"
X
#define PORT_CS PORTD
#define DDR_CS DDRD
#define PIN_CS 3
#define PORT_CE PORTD
#define DDR_CE DDRD
#define PIN_CE 5
X
static inline void set_cs(uint8_t val)
{
X if(val)
X PORT_CS |= (1<<PIN_CS);
X else
X PORT_CS &= ~(1<<PIN_CS);
}
X
static inline void set_ce(uint8_t val)
{
X if(val)
X PORT_CE |= (1<<PIN_CE);
X else
X PORT_CE &= ~(1<<PIN_CE);
}
X
static inline void rfm70_hw_setup(void)
{
X DDR_CS |= (1<<PIN_CS);
X DDR_CE |= (1<<PIN_CE);
}
X
static inline uint8_t read_reg(uint8_t reg)
{
X uint8_t res;
X set_cs(0);
X USART_SPI_Transfer(reg);
X res=USART_SPI_Transfer(0);
X set_cs(1);
X return res;
}
X
uint8_t read_reg(uint8_t reg);
void write_pcmd(uint8_t * cmd, uint8_t len);
void rfm70_init(uint8_t channel);
void switch_to_tx_mode(void);
void switch_to_rx_mode(void);
void show_error(uint8_t msg);
void set_channel(uint8_t cnum);
#endif
SHAR_EOF
(set 20 11 01 14 21 15 04 'tx_adc/rfm70.h'
eval "${shar_touch}") && \
chmod 0644 'tx_adc/rfm70.h'
if test $? -ne 0
then ${echo} "restore of tx_adc/rfm70.h failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx_adc/rfm70.h': 'MD5 check failed'
) << \SHAR_EOF
72acdfae93c428b813b3987455c8226d tx_adc/rfm70.h
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx_adc/rfm70.h'` -ne 1121 && \
${echo} "restoration warning: size of 'tx_adc/rfm70.h' is not 1121"
fi
fi
# ============= tx_adc/adc.c ==============
if test -f 'tx_adc/adc.c' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx_adc/adc.c (file already exists)"
else
${echo} "x - extracting tx_adc/adc.c (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx_adc/adc.c' &&
/*
X This file implements the transmitter part of the wireless guitar system
X written by Wojciech M. Zabolotny ( wzab<at>ise.pw.edu.pl )
X Copyright (C) Wojciech Zabolotny, 2011
X Please treat my modifications as PUBLIC DOMAIN, however if you
X use them, please mention it in documentation of your software
X and/or device (this is a suggestion, not the obligation).
X
X I do not provide any warranty on my modifications!
X You may use it only on your own risk!
*/
X
#include "rfm70.h"
#include "../customize.h"
#include "abuf.h"
#include "spi_atmega88.h"
#include "byte_select.h"
X
volatile uint32_t abuf[ABUF_LEN];
volatile uint8_t abuf_wptr = 0;
volatile uint8_t abuf_rptr = 0;
volatile uint8_t abuf_overrun = 0;
X
//Switches allocation
#define PORT_SW1 PORTC
#define PINS_SW1 PINC
#define DDR_SW1 DDRC
#define PIN_NR_SW1 1
X
#define PORT_SW2 PORTC
#define PINS_SW2 PINC
#define DDR_SW2 DDRC
#define PIN_NR_SW2 0
X
#define PORT_SW3 PORTB
#define PINS_SW3 PINB
#define DDR_SW3 DDRB
#define PIN_NR_SW3 4
X
#define PORT_SW4 PORTB
#define PINS_SW4 PINB
#define DDR_SW4 DDRB
#define PIN_NR_SW4 1
X
#define PORT_C1 PORTD
#define PINS_C1 PIND
#define DDR_C1 DDRD
#define PIN_NR_C1 6
X
#define PORT_C2 PORTD
#define PINS_C2 PIND
#define DDR_C2 DDRD
#define PIN_NR_C2 7
X
static void init_switches(void)
{
X //Set input direction
X DDR_SW1 &= ~(1<<PIN_NR_SW1);
X //Activate pull-up
X PORT_SW1 |= (1<<PIN_NR_SW1);
X //Set input direction
X DDR_SW2 &= ~(1<<PIN_NR_SW2);
X //Activate pull-up
X PORT_SW2 |= (1<<PIN_NR_SW2);
X //Set input direction
X DDR_SW3 &= ~(1<<PIN_NR_SW3);
X //Activate pull-up
X PORT_SW3 |= (1<<PIN_NR_SW3);
X //Set input direction
X DDR_SW4 &= ~(1<<PIN_NR_SW4);
X //Activate pull-up
X PORT_SW4 |= (1<<PIN_NR_SW4);
}
X
// Switch deglitching routines
// We need really fast code, so to keep it maintaineable,
// I implement it with macro instead of loop
#define proc_switch(condition,state,bit_mask) \
X if(condition) { \
X /* switch released */ \
X if (state > (255-SWITCH_THRESHOLD)) { \
X /* switch was pressed and now is released */ \
X state --; \
X /* but still report it as pressed */ \
X res |= bit_mask; \
X } else { \
X /* switch was released long enough */ \
X state = 0; \
X } \
X } else { \
X /* switch pressed */ \
X if (state < SWITCH_THRESHOLD) { \
X /* switch was released but now is pressed */ \
X state++; \
X } else { \
X /* switch was pressed long enough */ \
X state = 255 ; \
X /* report it as pressed */ \
X res |= bit_mask ; \
X } \
X }
X
#define SWITCH_THRESHOLD (10)
uint8_t switch_state[4]={0,0,0,0};
X
static inline uint8_t read_switches(void)
{
X uint8_t res = 0;
X proc_switch(PINS_SW1 & (1<<PIN_NR_SW1),switch_state[0],1);
X proc_switch(PINS_SW2 & (1<<PIN_NR_SW2),switch_state[1],2);
X proc_switch(PINS_SW3 & (1<<PIN_NR_SW3),switch_state[2],4);
X proc_switch(PINS_SW4 & (1<<PIN_NR_SW4),switch_state[3],8);
X return res;
}
X
// Configuration switch deglitching routines
// We need really fast code, so to keep it maintaineable,
// I implement it with macro instead of loop
#define proc_cfg_switch(condition,state,action_pressed,action_released) \
X if(condition) { \
X /* switch released */ \
X if (state > (255-SWITCH_THRESHOLD)) { \
X /* switch was pressed and now is released */ \
X state --; \
X } else { \
X /* switch was released long enough */ \
X /* trigger the action when switch was pressed and is released */ \
X if(state>128) action_released ; \
X state = 0; \
X } \
X } else { \
X /* switch pressed */ \
X if (state < SWITCH_THRESHOLD) { \
X /* switch was released but now is pressed */ \
X state++; \
X } else { \
X /* switch was pressed long enough */ \
X /* trigger the action when switch was released and is pressed */ \
X if(state<128) action_pressed; \
X state = 255 ; \
X } \
X }
X
/* Functions below are used to change channel up/down
X We have 83 channels 0-82. However most interferences (e.g. WiFi)
X occupy broader bandwidth covering a few consecutive channels.
X Therefore we change channel number not by 1, but by 8.
X Because 83 and 8 are relative primes (well in fact 83 is prime),
X we may select each channel from 0 to 82.
*/
#define MAX_CHANNEL 82
#define CHANNEL_STEP 8
uint8_t rf_channel = INITIAL_CHANNEL;
uint8_t swcfg_state0 = 0;
uint8_t swcfg_state1 = 0;
X
static inline void channel_up(void)
{
X set_ce(0);
X rf_channel += CHANNEL_STEP;
X if(rf_channel>MAX_CHANNEL) rf_channel -= (MAX_CHANNEL+1);
X set_channel(rf_channel);
X set_ce(1);
}
X
static inline void channel_down(void)
{
X set_ce(0);
X rf_channel -= CHANNEL_STEP;
X if(rf_channel>MAX_CHANNEL) rf_channel += (MAX_CHANNEL+1); // Yes, it is not
X // a mistake! We perform calculations modulo MAX_CHANNEL+1,
X // and rf_channel is uint8_t, so if after subtraction of CHANNEL_STEP
X // we get something above MAX_CHANNEL, it means that result was negative,
X // (but it is placed in uint8_t so its slightly below 255).
X // Therefore we need to correct the result by adding MAX_CHANNEL+1!
X set_channel(rf_channel);
X set_ce(1);
}
X
static inline void init_cfg_switches(void)
{
X //Set input direction
X DDR_C1 &= ~(1<<PIN_NR_C1);
X //Activate pull-up
X PORT_C1 |= (1<<PIN_NR_C1);
X //Set input direction
X DDR_C2 &= ~(1<<PIN_NR_C2);
X //Activate pull-up
X PORT_C2 |= (1<<PIN_NR_C2);
}
X
static inline void check_cfg_switches(void)
{
X proc_cfg_switch(PINS_C1 & (1<<PIN_NR_C1),swcfg_state0,channel_up(), {});
X proc_cfg_switch(PINS_C2 & (1<<PIN_NR_C2),swcfg_state1,channel_down(), {});
}
X
#define NR_OF_ADC_CHANS 4
volatile uint8_t adc_val[NR_OF_ADC_CHANS];
volatile uint8_t switches;
uint8_t adc_step=0;
const uint8_t adc_chan[NR_OF_ADC_CHANS]={2,3,4,5}; //Numbers of scanned channels
X
// ADC Interrupt routine
// It works, but should be rewritten in assembly,
// or should be running with active interupts!
ISR(ADC_vect,ISR_NOBLOCK)
{
X adc_val[adc_step++] = ADCH;
X if(adc_step==NR_OF_ADC_CHANS)
X adc_step = 0;
X ADMUX = (0 << REFS1) | (1 << REFS0) | (1 << ADLAR) |
X adc_chan[adc_step];
}
// ADC Setup routine
static void ADC_Init(void)
{
X uint8_t i;
X //Disable used digital inputs for used analog inputs
X for(i=0;i<NR_OF_ADC_CHANS;i++)
X DIDR0 |= (1 << adc_chan[i]);
X ADMUX = (0 << REFS1) | (1 << REFS0) | (1 << ADLAR) |
X (adc_chan[0] << MUX0);
X ADCSRB = (0<<ACME) & (0 << ADTS0) ; //Free runnning mode
X ADCSRA = (1 << ADEN) | (1 << ADSC) | (1 << ADATE) |
X (1 << ADIF) | (1 << ADIE) |
X (7 << ADPS0) ; //The lowest speed!
}
X
static inline uint8_t abuf_is_empty(void)
{
X if (abuf_rptr == abuf_wptr) return 0xff;
X return 0;
}
X
static inline void abuf_put(uint32_t t)
{
X uint8_t new_wptr=(abuf_wptr+1) & (ABUF_LEN-1);
X if (new_wptr==abuf_rptr) abuf_overrun=1;
X else {
X abuf[abuf_wptr] = t;
X abuf_wptr = new_wptr;
X }
}
static inline uint32_t abuf_get(void)
{
X uint32_t res = abuf[abuf_rptr];
X cli();
X abuf_rptr = (abuf_rptr+1) & ((1<<L2_ABUF_LEN)-1);
X sei();
X return res; // for CS5344 (or another ADC with left-justified I2S-like format)
X //return (res + res); // for CS5343 (or another ADC with I2S format
}
X
/* Initialization of the SPI for Cirrus CS5343/4 */
void SPI_Slave_Init(void)
{
X /* Set all SPI related pins as inputs */
X DDR_SPI_SCK &= ~(1<<PIN_NR_SPI_SCK);
X DDR_SPI_SS &= ~(1<<PIN_NR_SPI_SS);
X DDR_SPI_MOSI &= ~(1<<PIN_NR_SPI_MOSI);
X /* Enable SPI */
X SPCR = (1<<SPE);
X /* Enable SPI interrupts */
X SPCR |= (1<<SPIE);
}
X
char SPI_SlaveReceive(void)
{
X /* Wait for reception complete */
X while(!(SPSR & (1<<SPIF)))
X ;
X /* Return Data Register */
X return SPDR;
}
X
X
ISR(TIMER1_COMPA_vect, ISR_BLOCK)
{
X static uint32_t a_val = 0;
X abuf_put(a_val+=0x100);
}
X
static inline void start_emul_adc(int16_t val)
{
X OCR1A = val;
X TCCR1A = 0;
X TCCR1B = (0<<WGM13) | (1 << WGM12) | (1 << CS10);
X TIMSK1 = (1<<OCIE1A);
}
X
void show_error(uint8_t msg)
{
X uint8_t mask;
X PORT_C2 &= ~(1<<PIN_NR_C2); //Write 0 (we simulate the open-drain output)
X while(1) {
X mask=0x80;
X while(mask) {
X if(mask & msg)
X DDR_C2 |= (1<<PIN_NR_C2); //Activate the output - the LED or beeper is on
X else
X DDR_C2 &= ~(1<<PIN_NR_C2); //Deactivate the output - the LED or beeper is off
X _delay_ms(200);
X mask >>= 1;
X }
X PORTD &= ~(0x80);
X _delay_ms(400);
X }
}
X
X
uint8_t packet_nr=0;
static PROGMEM uint8_t cmd_switch_cfg[]={0x50,0x53};
/* Main routine */
int main(void)
{
X //Initialize the hardware - RFM70 and SPI
X uint8_t b1,b2;
X MCUSR &= ~(1 << WDRF);
X wdt_disable();
X clock_prescale_set(clock_div_1);
X USART_SPI_Init(0);
X rfm70_hw_setup();
X _delay_ms(500);
X set_ce(1);
X set_cs(1);
X b1=read_reg(0x07);
X write_pcmd(cmd_switch_cfg,sizeof(cmd_switch_cfg));
X b2=read_reg(0x07);
X if ((b1 ^ b2) != 0x80) show_error(0xae);
X rfm70_init(rf_channel);
X switch_to_tx_mode();
X init_switches();
X init_cfg_switches();
X ADC_Init();
X abuf_rptr = 0;
X abuf_wptr = 0;
X abuf_overrun = 0;
X SPI_Slave_Init();
X //Tu emulate ADC, we start the timer!
X //start_emul_adc(191);
X sei();
X //now in the loop transmit the data received from the CS5343
X packet_nr = 0;
X //We transmit all the information in packets with different numbers
X while(1) {
X uint8_t i;
X if(abuf_overrun) {
X cli();
X show_error(0xcb);
X }
X //Wait until transmitter is ready!
X while (read_reg(0x17) & 0x20) {};
X //if((packet_nr % 0x10)==0x0f) set_ce(0); //Protect against too long
X // stay in TX mode (according to the Nordic info)
X set_cs(0);
X USART_SPI_Fast_Transfer(0xb0); //Start of the packet!
X //Now transmit the packet specific information
X USART_SPI_Fast_Transfer(packet_nr);
X //Now transmit 10 ADC words
X for(i=0;i<10;i++) {
X uint32_t smp1,smp2;
X while(abuf_is_empty()) {};
X smp1 = abuf_get();
X USART_SPI_Fast_Transfer(uint32_b1(smp1));
X USART_SPI_Fast_Transfer(uint32_b2(smp1));
X USART_SPI_Fast_Transfer(uint32_b3(smp1));
X //USART_SPI_Fast_Transfer(((smp1 >> 24) & 0x0f) | ((smp2 >> 20) & 0xf0));
X }
X switch(packet_nr & 0x07) {
X case 0:
X USART_SPI_Transfer(0x01);
X break;
X case 1:
X USART_SPI_Transfer(read_switches()); //Scan switches every 8th packet!
X break;
X case 2:
X USART_SPI_Transfer(adc_val[0]);
X break;
X case 3:
X USART_SPI_Transfer(adc_val[1]);
X break;
X case 4:
X USART_SPI_Transfer(adc_val[2]);
X break;
X case 5:
X USART_SPI_Transfer(adc_val[3]);
X break;
X case 6:
X USART_SPI_Transfer(0);
X break;
X case 7:
X USART_SPI_Transfer(0);
X break;
X }
X // Now end until the data are really transmitted!
X //USART_SPI_End_Fast_Transmit();
X set_cs(1);
X //set_ce(0);
X if((packet_nr & 0x07)==0x07) check_cfg_switches(); //We check for channel change request every 8th packet!
X packet_nr++;
X }
}
SHAR_EOF
(set 20 11 01 15 14 37 38 'tx_adc/adc.c'
eval "${shar_touch}") && \
chmod 0644 'tx_adc/adc.c'
if test $? -ne 0
then ${echo} "restore of tx_adc/adc.c failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx_adc/adc.c': 'MD5 check failed'
) << \SHAR_EOF
4355039ece0cddd204f1076eb86b58ac tx_adc/adc.c
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx_adc/adc.c'` -ne 11001 && \
${echo} "restoration warning: size of 'tx_adc/adc.c' is not 11001"
fi
fi
# ============= tx_adc/abuf.h ==============
if test -f 'tx_adc/abuf.h' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx_adc/abuf.h (file already exists)"
else
${echo} "x - extracting tx_adc/abuf.h (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx_adc/abuf.h' &&
/*
X The code below is published as PUBLIC DOMAIN as Wojciech M. Zabolotny
X ( wzab<at>ise.pw.edu.pl ) 2011.01.11
X No warranty of any kind is provided! Use at your own risk!
*/
#define L2_ABUF_LEN 7
#define ABUF_LEN (1<<L2_ABUF_LEN)
X
SHAR_EOF
(set 20 11 01 15 14 36 27 'tx_adc/abuf.h'
eval "${shar_touch}") && \
chmod 0644 'tx_adc/abuf.h'
if test $? -ne 0
then ${echo} "restore of tx_adc/abuf.h failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx_adc/abuf.h': 'MD5 check failed'
) << \SHAR_EOF
63246d38e83672a13ce6bf4aa3095c13 tx_adc/abuf.h
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx_adc/abuf.h'` -ne 236 && \
${echo} "restoration warning: size of 'tx_adc/abuf.h' is not 236"
fi
fi
# ============= tx_adc/usart_spi_atmega32u2.h ==============
if test -f 'tx_adc/usart_spi_atmega32u2.h' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx_adc/usart_spi_atmega32u2.h (file already exists)"
else
${echo} "x - extracting tx_adc/usart_spi_atmega32u2.h (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx_adc/usart_spi_atmega32u2.h' &&
/*
X The code below is published as PUBLIC DOMAIN as Wojciech M. Zabolotny
X ( wzab<at>ise.pw.edu.pl ) 2011.01.11
X No warranty of any kind is provided! Use at your own risk!
*/
X
static inline uint8_t SPI_Transfer(uint8_t c)
{
X /* Wait for empty transmit buffer */
X while ( !( UCSR1A & (1<<UDRE1)) );
X /* Put data into buffer, sends the data */
X UDR1 = c;
X /* Wait for data to be received */
X while ( !(UCSR1A & (1<<RXC1)) );
X /* Get and return received data from buffer */
X return UDR1;
}
SHAR_EOF
(set 20 11 01 15 14 45 56 'tx_adc/usart_spi_atmega32u2.h'
eval "${shar_touch}") && \
chmod 0644 'tx_adc/usart_spi_atmega32u2.h'
if test $? -ne 0
then ${echo} "restore of tx_adc/usart_spi_atmega32u2.h failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx_adc/usart_spi_atmega32u2.h': 'MD5 check failed'
) << \SHAR_EOF
33fb242b7a80c1770eb8e16f5035dc5a tx_adc/usart_spi_atmega32u2.h
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx_adc/usart_spi_atmega32u2.h'` -ne 499 && \
${echo} "restoration warning: size of 'tx_adc/usart_spi_atmega32u2.h' is not 499"
fi
fi
# ============= tx_adc/usart_spi_atmega88.h ==============
if test -f 'tx_adc/usart_spi_atmega88.h' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx_adc/usart_spi_atmega88.h (file already exists)"
else
${echo} "x - extracting tx_adc/usart_spi_atmega88.h (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx_adc/usart_spi_atmega88.h' &&
/*
X The code below is published as PUBLIC DOMAIN as Wojciech M. Zabolotny
X ( wzab<at>ise.pw.edu.pl ) 2011.01.11
X No warranty of any kind is provided! Use at your own risk!
*/
X
static inline uint8_t USART_SPI_Transfer(uint8_t c)
{
X const uint8_t status_mask=((1<<RXC0) | (1<<TXC0));
X /* Wait for empty transmit buffer */
X while ( !( UCSR0A & (1<<UDRE0)) ){};
X /* Put data into buffer, sends the data */
X cli();
X UDR0 = c;
X UCSR0A = (1<<TXC0); //Clear the completed transfer flag!
X sei();
X /* Wait for data to be received and transmission completed
X Please note, that it is not enough to wait for availability
X of received data (RXC0), if you set SS high right after
X SS is set, you'll experience SPI frame error in the RFM70!
X I've lost quite a long time trying to debug this problem!!!
X */
X while ( (UCSR0A & status_mask) != status_mask ){};
X /* Get and return received data from buffer */
X return UDR0;
}
X
static inline void USART_SPI_Fast_Transfer(uint8_t c)
{
X /* Wait for empty transmit buffer */
X while ( !( UCSR0A & (1<<UDRE0)) );
X /* Put data into buffer, sends the data */
X UDR0 = c;
}
X
static inline uint8_t USART_SPI_End_Fast_Transfer(void)
{
X const uint8_t status_mask=((1<<RXC0) | (1<<TXC0));
X /* Wait for data to be received and transmission completed
X Please note, that it is not enough to wait for availability
X of received data (RXC0), if you set SS high right after
X SS is set, you'll experience SPI frame error in the RFM70!
X I've lost quite a long time trying to debug this problem!!!
X */
X while ( (UCSR0A & status_mask) != status_mask ){};
X /* Get and return received data from buffer */
X return UDR0;
}
X
static inline void USART_SPI_Init( unsigned int baud )
{
X UBRR0 = 0;
X /* Setting the XCKn port pin as output, enables master mode. */
X DDRD |= (1 << 4); // XCK1_DDR |= (1<<XCK1);
X /* Set MSPI mode of operation and SPI data mode 0. */
X UCSR0C = (1<<UMSEL01)|(1<<UMSEL00)|(0<<UCPHA0)|(0<<UCPOL0);
X /* Enable receiver and transmitter. */
X UCSR0B = (1<<RXEN0)|(1<<TXEN0);
X /* Set baud rate. */
X /* IMPORTANT: The Baud Rate must be set after the transmitter is enabled
X */
X UBRR0 = baud;
}
X
SHAR_EOF
(set 20 11 01 15 14 39 24 'tx_adc/usart_spi_atmega88.h'
eval "${shar_touch}") && \
chmod 0644 'tx_adc/usart_spi_atmega88.h'
if test $? -ne 0
then ${echo} "restore of tx_adc/usart_spi_atmega88.h failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx_adc/usart_spi_atmega88.h': 'MD5 check failed'
) << \SHAR_EOF
8b958f6e34a2a355c3d8979796c83f82 tx_adc/usart_spi_atmega88.h
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx_adc/usart_spi_atmega88.h'` -ne 2185 && \
${echo} "restoration warning: size of 'tx_adc/usart_spi_atmega88.h' is not 2185"
fi
fi
# ============= tx_adc/verify.sh ==============
if test -f 'tx_adc/verify.sh' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx_adc/verify.sh (file already exists)"
else
${echo} "x - extracting tx_adc/verify.sh (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx_adc/verify.sh' &&
avrdude -c usbasp -B 3 -p atmega88 -U flash:v:adc.hex
SHAR_EOF
(set 20 11 01 07 18 41 33 'tx_adc/verify.sh'
eval "${shar_touch}") && \
chmod 0644 'tx_adc/verify.sh'
if test $? -ne 0
then ${echo} "restore of tx_adc/verify.sh failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx_adc/verify.sh': 'MD5 check failed'
) << \SHAR_EOF
a1ca13979281a4e73b8e99b8a69ce006 tx_adc/verify.sh
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx_adc/verify.sh'` -ne 55 && \
${echo} "restoration warning: size of 'tx_adc/verify.sh' is not 55"
fi
fi
# ============= tx_adc/progr.sh ==============
if test -f 'tx_adc/progr.sh' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx_adc/progr.sh (file already exists)"
else
${echo} "x - extracting tx_adc/progr.sh (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx_adc/progr.sh' &&
avrdude -c usbasp -B 3 -p atmega88 -U flash:w:adc.hex
SHAR_EOF
(set 20 11 01 07 16 54 10 'tx_adc/progr.sh'
eval "${shar_touch}") && \
chmod 0644 'tx_adc/progr.sh'
if test $? -ne 0
then ${echo} "restore of tx_adc/progr.sh failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx_adc/progr.sh': 'MD5 check failed'
) << \SHAR_EOF
fab76d41ec79922029ead04dd713e342 tx_adc/progr.sh
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx_adc/progr.sh'` -ne 55 && \
${echo} "restoration warning: size of 'tx_adc/progr.sh' is not 55"
fi
fi
# ============= tx_adc/byte_select.h ==============
if test -f 'tx_adc/byte_select.h' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx_adc/byte_select.h (file already exists)"
else
${echo} "x - extracting tx_adc/byte_select.h (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx_adc/byte_select.h' &&
/*
X The code below is published as PUBLIC DOMAIN as Wojciech M. Zabolotny
X ( wzab<at>ise.pw.edu.pl ) 2011.01.11
X No warranty of any kind is provided! Use at your own risk!
*/
#ifndef _BYTE_SELECT_H_
#define _BYTE_SELECT_H_
#define byte_select(v) \
X ((uint8_t *) &v)
__attribute__ ((always_inline))
static inline uint8_t uint32_b0(uint32_t v)
{
X union {
X uint32_t i;
X uint8_t b[4];
X } tmp;
X tmp.i = v;
X return tmp.b[0];
}
__attribute__ ((always_inline))
static inline uint8_t uint32_b1(uint32_t v)
{
X union {
X uint32_t i;
X uint8_t b[4];
X } tmp;
X tmp.i = v;
X return tmp.b[1];
}
__attribute__ ((always_inline))
static inline uint8_t uint32_b2(uint32_t v)
{
X union {
X uint32_t i;
X uint8_t b[4];
X } tmp;
X tmp.i = v;
X return tmp.b[2];
}
__attribute__ ((always_inline))
static inline uint8_t uint32_b3(uint32_t v)
{
X union {
X uint32_t i;
X uint8_t b[4];
X } tmp;
X tmp.i = v;
X return tmp.b[3];
}
#endif
SHAR_EOF
(set 20 11 01 15 14 39 11 'tx_adc/byte_select.h'
eval "${shar_touch}") && \
chmod 0644 'tx_adc/byte_select.h'
if test $? -ne 0
then ${echo} "restore of tx_adc/byte_select.h failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx_adc/byte_select.h': 'MD5 check failed'
) << \SHAR_EOF
30101dc3bea8fc2d95bbe9ae3345969f tx_adc/byte_select.h
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx_adc/byte_select.h'` -ne 938 && \
${echo} "restoration warning: size of 'tx_adc/byte_select.h' is not 938"
fi
fi
# ============= tx_adc/SPI_isr.S ==============
if test -f 'tx_adc/SPI_isr.S' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx_adc/SPI_isr.S (file already exists)"
else
${echo} "x - extracting tx_adc/SPI_isr.S (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx_adc/SPI_isr.S' &&
;; The code below is written and published as PUBLIC DOMAIN
;; by Wojciech M. Zabolotny ( wzab<at>ise.pw.edu.pl ) 2011.01.11
;; No warranty of any kind is provided! Use at your own risk!
#include <avr/io.h> ;required for register definitions
#include "abuf.h"
#include "spi_atmega88.h"
X
X .data
; .section .noinit
smp_b: .byte 0,0,0,0
smp_mask: .byte 0
X
X .extern abuf_rptr ; buffer read pointer (uint8_t)
X .extern abuf_wptr ; buffer write pointer (uint8_t)
X .extern abuf ; buffer (vector of uint32_t with length ABUF_LEN)
X .extern abuf_overrun ; buffer overrun flag (uint8_t)
X .text
X .global SPI_STC_vect
SPI_STC_vect:
X push r0
X in r0, 0x3f
X push r0
X ;; end of prolog
X in r0,_SFR_IO_ADDR(SPSR) ; read status to clear interrupt
X sbic _SFR_IO_ADDR(PINS_SPI_SS),PIN_NR_SPI_SS ; Test the SS input
X rjmp end_of_frame ; If SS is high, this is end of data in our channel
X lds r0,smp_mask
X sbrc r0,0
X rjmp byte_1st
X sbrc r0,1
X rjmp byte_2nd
X sbrc r0,2
X rjmp byte_3rd
X sbrc r0,3
X rjmp byte_4th
X ;; It should not happen, but we should be prepared for nonstandard MCLK/SCLK ratio
X in r0,_SFR_IO_ADDR(SPDR)
X ;; epilog - repeated multiple times to save clocks on jumps
X pop r0
X out 0x3f, r0
X pop r0
X reti
byte_1st:
X ;; update the byte mask
X lsl r0
X sts smp_mask,r0
X ;; store the data
X in r0,_SFR_IO_ADDR(SPDR)
X sts smp_b,r0
X ;; epilog - repeated multiple times to save clocks on jumps
X pop r0
X out 0x3f, r0
X pop r0
X reti
byte_2nd:
X ;; update the byte mask
X lsl r0
X sts smp_mask,r0
X ;; store the data
X in r0,_SFR_IO_ADDR(SPDR)
X sts smp_b+1,r0
X ;; epilog - repeated multiple times to save clocks on jumps
X pop r0
X out 0x3f, r0
X pop r0
X reti
byte_3rd:
X ;; update the byte mask
X lsl r0
X sts smp_mask,r0
X ;; store the data
X in r0,_SFR_IO_ADDR(SPDR)
X sts smp_b+2,r0
X ;; epilog - repeated multiple times to save clocks on jumps
X pop r0
X out 0x3f, r0
X pop r0
X reti
byte_4th:
X ;; update the byte mask
X lsl r0
X sts smp_mask,r0
X ;; store the data
X in r0,_SFR_IO_ADDR(SPDR)
X sts smp_b+3,r0
X ;; epilog - repeated multiple times to save clocks on jumps
X pop r0
X out 0x3f, r0
X pop r0
X reti
end_of_frame:
X ;; Now, at the end of frame we can perform more
X ;; sophisticated processing
X push r30
X push r31
X in r30,_SFR_IO_ADDR(SPDR)
X ;; first, verify that it is not the 4th byte
X lds r0,smp_mask
X sbrs r0,4
X rjmp not_4th_byte
X ;; update the byte mask
X lsl r0
X sts smp_mask,r0
X ;; store the data
X sts smp_b+3,r30
not_4th_byte:
X ;; set mask for next words
X ldi r30,1
X sts smp_mask,r30
X ;; Now copy all bytes to the buffer
X ;; Check if there is a free space
X lds r30,abuf_wptr
X lds r0,abuf_rptr
X mov r31,r30
X inc r31
X andi r31, (ABUF_LEN-1)
X cp r0,r31
X breq no_space
X ;; There is free space in the buffer - copy the data
X sts abuf_wptr,r31 ; Store new abuf_wptr
X ldi r31,0
X ;; Multiply Z by 4
X add r30,r30
X adc r31,r31
X add r30,r30
X adc r31,r31
X ;; Find the address in abuf
X subi r30,lo8(-(abuf))
X sbci r31,hi8(-(abuf))
X lds r0,smp_b+3
X st Z+,r0
X lds r0,smp_b+2
X st Z+,r0
X lds r0,smp_b+1
X st Z+,r0
X lds r0,smp_b
X st Z+,r0
exit_isr_2:
X ;; exit isr when r31,r30 and r0 were saved
X ;; extended epilog
X pop r31
X pop r30
X pop r0
X out 0x3f, r0
X pop r0
X reti
no_space:
X ldi r30,0xff
X sts abuf_overrun,r30
X ;; this is anyway emergency situation and sampling was disturbed
X ;; so we can loose some cycles for rjmp ;-)
X ;; I do not provide another copy of epilog, using rjmp instead...
X rjmp exit_isr_2
SHAR_EOF
(set 20 11 01 15 14 40 55 'tx_adc/SPI_isr.S'
eval "${shar_touch}") && \
chmod 0644 'tx_adc/SPI_isr.S'
if test $? -ne 0
then ${echo} "restore of tx_adc/SPI_isr.S failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx_adc/SPI_isr.S': 'MD5 check failed'
) << \SHAR_EOF
5ed50acb576649a88be3ed5365747781 tx_adc/SPI_isr.S
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx_adc/SPI_isr.S'` -ne 3819 && \
${echo} "restoration warning: size of 'tx_adc/SPI_isr.S' is not 3819"
fi
fi
if rm -fr ${lock_dir}
then ${echo} "x - removed lock directory ${lock_dir}."
else ${echo} "x - failed to remove lock directory ${lock_dir}."
exit 1
fi
exit 0
In this version I have reduced the sampling frequency to 24 kHz
(quite acceptable for guitar) and bit resolution to 20 bits.
These modifications allowed to use RFM70 in the acknowledge/auto retransmission
mode, which improved the quality of the link.
I have also corrected the USART SPI routines a little.
For the USB host the system is visible as USB MIDI/audio device
with 24kHz sampling (rate acceptable for Linux+jackd+alsa_in) and
24-bit resolution (4 LSB bits are simple padded with zeroes).
You can connect the system through "alsa_in" to "jakcd" in Linux
and then to your virtual guitar amp/sound processor - e.g. rakarrack
or guitarix.
I simply run
$qjackctl
$guitarix
$alsa_in -q 4 -v -d hw:0,0,0 -c 1 -r 24000 -p 512 -n 4
and then connect the "alsa_in" source to "guitarix_amp" in qjackctl.
Additionally the transmitter contains 4 switches and 4 potentiometers,
which are mapped to MIDI controls)
Connections in the transmitter:
ATmega88 - powered from 5V,
CS5343/4 - powered from 5V and connected to the ATmega SPI
RFM70 - powered from 3.3V and connected to the ATmega USART working in SPI mode
Leds with resistors are connected between GND and:
D2 - to signal too low throughput of the link
MIDI switches are connected to C1, C0, B4, B1
MIDI otentiometers are connected to: ADC channels 2,3,4,5
Channel up/down switches are connected to D6 and D7 (you can also connect
LED with resistor between these pins and VDD - newer versions of firmware will
display diagnostic information with these LEDS).
Connections in the receiver:
ATmega32u4 - powered from USB from 5V.
RFM70 - powered from 3.3V and connected to the ATmega SPI
Leds with resistors are connected to:
D1 - to signal that packets are received
F0 - to signal, that the USB host receives data too slowly
F1 - to signal that received packets are out of order
Full documentation will be published soon on the dedicated website.
Please note, that this is a free design. I don't provide any warranty.
Use it on your own risk!
Wojciech Zabolotny,
wz...@ise.pw.edu.pl
#!/bin/sh
# This is a shell archive (produced by GNU sharutils 4.9).
# To extract the files from this archive, save it to some FILE, remove
# everything before the `#!/bin/sh' line above, then type `sh FILE'.
#
lock_dir=_sh06858
# Made on 2011-01-19 12:59 CET by <wzab@wzab>.
# Source directory was `/tmp/wgs'.
#
# Existing files will *not* be overwritten, unless `-c' is specified.
#
# This shar contains:
# length mode name
# ------ ---------- ------------------------------------------
# 5533 -rw-r--r-- rx/rfm70.c
# 1541 -rw-r--r-- rx/rfm70.h
# 2579 -rw-r--r-- rx/MIDI.h
# 14134 -rw-r--r-- rx/AudioInput.c
# 2894 -rw-r--r-- rx/AudioInput.h
# 611 -rw-r--r-- rx/spi_atmega32u4.h
# 16376 -rw-r--r-- rx/Descriptors.c
# 5407 -rw-r--r-- rx/Descriptors.h
# 21112 -rw-r--r-- rx/makefile
# 57 -rw-r--r-- rx/abuf.h
# 936 -rw-r--r-- rx/byte_select.h
# 5458 -rw-r--r-- tx/Makefile
# 485 -rw-r--r-- tx/spi_atmega88.h
# 5369 -rw-r--r-- tx/rfm70.c
# 1163 -rw-r--r-- tx/rfm70.h
# 12499 -rw-r--r-- tx/adc.c
# 236 -rw-r--r-- tx/abuf.h
# 499 -rw-r--r-- tx/usart_spi_atmega32u2.h
# 2219 -rw-r--r-- tx/usart_spi_atmega88.h
# 938 -rw-r--r-- tx/byte_select.h
# 3822 -rw-r--r-- tx/SPI_isr.S
# 433 -rw-r--r-- customize.h
#
X {1,0x01}, //Autoacknowledge in pipe 0! Was:{1,0x3F}, //Enable auto acknowledgement data pipe5\4\3\2\1\0
X {2,0x01}, //Enable only RX Addresses pipe0
X {3,0x01}, //RX/TX address field width 3 bytes
X {4,0x0f}, //Retransmission 15 times after 250µs ! Was: {4,0xff}, //auto retransmission dalay (4000us),auto retransmission count(15)
(set 20 11 01 17 17 14 48 'rx/rfm70.c'
eval "${shar_touch}") && \
chmod 0644 'rx/rfm70.c'
if test $? -ne 0
then ${echo} "restore of rx/rfm70.c failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'rx/rfm70.c': 'MD5 check failed'
) << \SHAR_EOF
b7c267c28565bde0ef33f23fd768435e rx/rfm70.c
SHAR_EOF
else
test `LC_ALL=C wc -c < 'rx/rfm70.c'` -ne 5533 && \
${echo} "restoration warning: size of 'rx/rfm70.c' is not 5533"
X timer_count = 4*PKT_TIMEOUT; //This value should not be higher than 255!
X //Disable the INT0 interrupt
X EIMSK &= ~(1<<INT0);
X EIFR = (1<<INTF0);
X PORT_PKTRCV |= (1<<PIN_NR_PKTRCV) ; //Show that packet arrived
X packet_rcvd_count = 100;
X sei(); //Enable interrupts
X while(1) {
X uint8_t i, pkt_nr;
X union{
X uint32_t i;
X uint8_t b[4];
X } smp1,smp2;
X //The whole payload is received, cancel the interrupt
X write_reg(0x7,0x40);
X if((read_reg(0x17) & 0x01) == 1) {
X break;
X }
X set_cs(0);
X SPI_Transfer(0x61);
X pkt_nr=SPI_Transfer(0x00); //read packet number
X // Check ifany packet is lost and signal it
X // Please note that "pkt_nr-old_pkt_nr !=1"
X // generates wrong code. You have to cast result to uint8_t
X if((uint8_t)(pkt_nr-old_pkt_nr) != 1) {
X packet_lost_count = 100;
X PORT_PKTLST |= (1<<PIN_NR_PKTLST);
X }
X old_pkt_nr = pkt_nr;
X // Copy the data!
X for(i=0;i<6;i++) {
X smp1.b[2]= SPI_Transfer(0x00);
X smp1.b[1]= SPI_Transfer(0x00);
X smp2.b[2]= SPI_Transfer(0x00);
X smp2.b[1]= SPI_Transfer(0x00);
X smp1.b[0]= SPI_Transfer(0x00);
X //Unpack nibbles
X smp2.b[0]= (smp1.b[0] & 0x0f) << 4;
X smp1.b[0] &= 0xf0;
X abuf_put(smp1.i);
X abuf_put(smp2.i);
(set 20 11 01 19 12 54 31 'rx/AudioInput.c'
eval "${shar_touch}") && \
chmod 0644 'rx/AudioInput.c'
if test $? -ne 0
then ${echo} "restore of rx/AudioInput.c failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'rx/AudioInput.c': 'MD5 check failed'
) << \SHAR_EOF
7de300d2405da08151ec7ea9ff2465cf rx/AudioInput.c
SHAR_EOF
else
test `LC_ALL=C wc -c < 'rx/AudioInput.c'` -ne 14134 && \
${echo} "restoration warning: size of 'rx/AudioInput.c' is not 14134"
(set 20 11 01 19 12 33 10 'rx/spi_atmega32u4.h'
X #define AUDIO_SAMPLE_FREQUENCY 24000
(set 20 11 01 17 17 45 46 'rx/Descriptors.h'
eval "${shar_touch}") && \
chmod 0644 'rx/Descriptors.h'
if test $? -ne 0
then ${echo} "restore of rx/Descriptors.h failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'rx/Descriptors.h': 'MD5 check failed'
) << \SHAR_EOF
b6f8f3256cce9cad4f9ed1a9f7553a92 rx/Descriptors.h
(set 20 11 01 15 15 31 49 'rx/makefile'
eval "${shar_touch}") && \
chmod 0644 'rx/makefile'
if test $? -ne 0
then ${echo} "restore of rx/makefile failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'rx/makefile': 'MD5 check failed'
) << \SHAR_EOF
5bfce849e9645a83e721654eddbc834e rx/makefile
SHAR_EOF
else
test `LC_ALL=C wc -c < 'rx/makefile'` -ne 21112 && \
${echo} "restoration warning: size of 'rx/makefile' is not 21112"
# ============= tx/Makefile ==============
if test ! -d 'tx'; then
mkdir 'tx'
if test $? -eq 0
then ${echo} "x - created directory tx."
else ${echo} "x - failed to create directory tx."
exit 1
fi
fi
if test -f 'tx/Makefile' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx/Makefile (file already exists)"
else
${echo} "x - extracting tx/Makefile (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx/Makefile' &&
(set 20 11 01 11 19 01 18 'tx/Makefile'
eval "${shar_touch}") && \
chmod 0644 'tx/Makefile'
if test $? -ne 0
then ${echo} "restore of tx/Makefile failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx/Makefile': 'MD5 check failed'
) << \SHAR_EOF
a6eac26d6a74cef290b12abf6fdd9f4a tx/Makefile
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx/Makefile'` -ne 5458 && \
${echo} "restoration warning: size of 'tx/Makefile' is not 5458"
fi
fi
# ============= tx/spi_atmega88.h ==============
if test ! -d 'tx'; then
mkdir 'tx'
if test $? -eq 0
then ${echo} "x - created directory tx."
else ${echo} "x - failed to create directory tx."
exit 1
fi
fi
if test -f 'tx/spi_atmega88.h' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx/spi_atmega88.h (file already exists)"
else
${echo} "x - extracting tx/spi_atmega88.h (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx/spi_atmega88.h' &&
/*
X The code below is published as PUBLIC DOMAIN as Wojciech M. Zabolotny
X ( wzab<at>ise.pw.edu.pl ) 2011.01.11
X No warranty of any kind is provided! Use at your own risk!
*/
X
#ifndef _SPI_ATMEGA88_H_
#define _SPI_ATMEGA88_H_
X #define DDR_SPI_SCK DDRB
X #define PINS_SPI_SCK PINB
X #define PIN_NR_SPI_SCK 5
X
X #define DDR_SPI_SS DDRB
X #define PINS_SPI_SS PINB
X #define PIN_NR_SPI_SS 2
X
X #define DDR_SPI_MOSI DDRB
X #define PINS_SPI_MOSI PINB
X #define PIN_NR_SPI_MOSI 3
#endif
SHAR_EOF
(set 20 11 01 15 14 38 31 'tx/spi_atmega88.h'
eval "${shar_touch}") && \
chmod 0644 'tx/spi_atmega88.h'
if test $? -ne 0
then ${echo} "restore of tx/spi_atmega88.h failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx/spi_atmega88.h': 'MD5 check failed'
) << \SHAR_EOF
bb247db021baae9469174f326b2d921f tx/spi_atmega88.h
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx/spi_atmega88.h'` -ne 485 && \
${echo} "restoration warning: size of 'tx/spi_atmega88.h' is not 485"
fi
fi
# ============= tx/rfm70.c ==============
if test -f 'tx/rfm70.c' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx/rfm70.c (file already exists)"
else
${echo} "x - extracting tx/rfm70.c (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx/rfm70.c' &&
X {0,0x7F}, //mask RX_DR\TX_DS\MAX_RT (we do not use IRQ!),Enable CRC ,2byte,POWER UP,PRX
X {1,0x1}, //Enable AACK only in pipe 0! Was:{1,0x3F}, //Enable auto acknowledgement data pipe5\4\3\2\1\0
X {2,0x01}, //Enable only RX pipe 0 //Enable RX Addresses pipe5\4\3\2\1\0
X {3,0x01}, //RX/TX address field width 3 bytes
X {4,0x0f}, //up to 15 retransmissions 250 ,A5 (Bs delay! Was: {4,0xff}, //auto retransmission dalay (4000us),auto retransmission count(15)
(set 20 11 01 18 19 41 25 'tx/rfm70.c'
eval "${shar_touch}") && \
chmod 0644 'tx/rfm70.c'
if test $? -ne 0
then ${echo} "restore of tx/rfm70.c failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx/rfm70.c': 'MD5 check failed'
) << \SHAR_EOF
05916c94d8fc95d3ec1bdfbc3294d973 tx/rfm70.c
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx/rfm70.c'` -ne 5369 && \
${echo} "restoration warning: size of 'tx/rfm70.c' is not 5369"
fi
fi
# ============= tx/rfm70.h ==============
if test -f 'tx/rfm70.h' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx/rfm70.h (file already exists)"
else
${echo} "x - extracting tx/rfm70.h (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx/rfm70.h' &&
void write_reg(uint8_t reg, uint8_t val);
uint8_t read_reg(uint8_t reg);
void write_pcmd(uint8_t * cmd, uint8_t len);
void rfm70_init(uint8_t channel);
void switch_to_tx_mode(void);
void switch_to_rx_mode(void);
void show_error(uint8_t msg);
void set_channel(uint8_t cnum);
#endif
SHAR_EOF
(set 20 11 01 17 17 08 57 'tx/rfm70.h'
eval "${shar_touch}") && \
chmod 0644 'tx/rfm70.h'
if test $? -ne 0
then ${echo} "restore of tx/rfm70.h failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx/rfm70.h': 'MD5 check failed'
) << \SHAR_EOF
b32283084f4867625aedd7083b16df5e tx/rfm70.h
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx/rfm70.h'` -ne 1163 && \
${echo} "restoration warning: size of 'tx/rfm70.h' is not 1163"
fi
fi
# ============= tx/adc.c ==============
if test -f 'tx/adc.c' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx/adc.c (file already exists)"
else
${echo} "x - extracting tx/adc.c (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx/adc.c' &&
/*
X This file implements the transmitter part of the wireless guitar system
X written by Wojciech M. Zabolotny ( wzab<at>ise.pw.edu.pl )
X Copyright (C) Wojciech Zabolotny, 2011
X Please treat my modifications as PUBLIC DOMAIN, however if you
X use them, please mention it in documentation of your software
X and/or device (this is a suggestion, not the obligation).
X
X I do not provide any warranty on my modifications!
X You may use it only on your own risk!
*/
X
#include "rfm70.h"
#include "../customize.h"
#include "abuf.h"
#include "spi_atmega88.h"
#include "byte_select.h"
X
volatile uint32_t abuf[ABUF_LEN];
volatile uint8_t abuf_wptr = 0;
volatile uint8_t abuf_rptr = 0;
volatile uint8_t abuf_overrun = 0;
X
//Overrun LED location
#define PORT_OVR PORTD
#define PINS_OVR PIND
#define DDR_OVR DDRD
#define PIN_NR_OVR 2
static inline int32_t abuf_get(void)
{
X uint32_t res = abuf[abuf_rptr];
X cli();
X abuf_rptr = (abuf_rptr+1) & (ABUF_LEN-1);
X sei();
X return (int32_t) res; // for CS5344 (or another ADC with left-justified I2S-like format)
X //return (int32_t) (res + res); // for CS5343 (or another ADC with I2S format
}
X
/* Initialization of the SPI for Cirrus CS5343/4 */
void SPI_Slave_Init(void)
{
X /* Set all SPI related pins as inputs */
X DDR_SPI_SCK &= ~(1<<PIN_NR_SPI_SCK);
X DDR_SPI_SS &= ~(1<<PIN_NR_SPI_SS);
X DDR_SPI_MOSI &= ~(1<<PIN_NR_SPI_MOSI);
X /* Enable SPI */
X SPCR = (1<<SPE);
X /* Enable SPI interrupts */
X SPCR |= (1<<SPIE);
}
X
char SPI_SlaveReceive(void)
{
X /* Wait for reception complete */
X while(!(SPSR & (1<<SPIF)))
X ;
X /* Return Data Register */
X return SPDR;
}
X
volatile uint8_t count_led_ovr = 0;
X
inline void init_led_ovr(void)
{
X DDR_OVR |= (1<<PIN_NR_OVR);
X PORT_OVR &= ~(1<<PIN_NR_OVR);
}
X
ISR(TIMER1_COMPA_vect, ISR_NOBLOCK)
{
X uint8_t tmp = count_led_ovr;
X if(tmp) {
X tmp--;
X if(tmp == 0) {
X PORT_OVR &= ~(1<<PIN_NR_OVR);
X }
X count_led_ovr = tmp;
X }
}
X
static inline void start_timer1(uint16_t val)
{
X OCR1A = val;
X TCCR1A = 0;
X TCCR1B = (0<<WGM13) | (1 << WGM12) | (1 << CS10);
X TIMSK1 = (1<<OCIE1A);
}
X
void show_error(uint8_t msg)
{
X uint8_t mask;
X PORT_C2 &= ~(1<<PIN_NR_C2); //Write 0 (we simulate the open-drain output)
X while(1) {
X mask=0x80;
X while(mask) {
X if(mask & msg)
X DDR_C2 |= (1<<PIN_NR_C2); //Activate the output - the LED or beeper is on
X else
X DDR_C2 &= ~(1<<PIN_NR_C2); //Deactivate the output - the LED or beeper is off
X _delay_ms(200);
X mask >>= 1;
X }
X DDR_C2 &= ~(1<<PIN_NR_C2);
X init_led_ovr();
X start_timer1(40000); // 200Hz timer
X sei();
X {
X //As we seem to have problems with the overrun LED,
X //Let's trigger it once to check wether it is working correctly
X PORT_OVR |= (1<<PIN_NR_OVR);
X count_led_ovr = 200; // 1 second!
X }
X //now in the loop transmit the data received from the CS5343
X packet_nr = 0;
X //We transmit all the information in packets with different numbers
X while(1) {
X uint8_t i;
X if(abuf_overrun) {
X PORT_OVR |= (1<<PIN_NR_OVR);
X abuf_overrun = 0;
X count_led_ovr = 100; //The LED should be on for 500 ms
X }
X //Check the status of the transmitter
X b1=read_reg(0x07);
X if(b1 & 0x10) {
X //Maximum number of retransmissions occured!
X //set_ce(0);
X write_reg(0x07,0x10); //clear interrupt
X //set_ce(1); //retry transfer!
X //Whe we have a problem with transmission, then we may never
X //get to the code servicing packet N*16+7 which checks
X //for channel change buttons.
X //Therefore we check them here as well!
X check_cfg_switches();
X }
X //Write data only if transmitter is ready!
X if((b1 & 0x01) == 0) {
X set_cs(0);
X USART_SPI_Fast_Transfer(0xa0); //Start of the packet!
X //Now transmit the packet specific information
X USART_SPI_Fast_Transfer(packet_nr);
X //Now transmit 10 ADC words
X for(i=0;i<6;i++) {
X int32_t smp1,smp2;
X while(abuf_is_empty()) {};
X smp1 = abuf_get(); //discard this sample
X while(abuf_is_empty()) {};
X smp1 = abuf_get();
X while(abuf_is_empty()) {};
X smp2 = abuf_get(); //discard this sample
X while(abuf_is_empty()) {};
X smp2 = abuf_get();
X //Now pack two 20-bit samples into 5 bytes
X //First transmit whole bytes
X USART_SPI_Fast_Transfer(uint32_b3(smp1));
X USART_SPI_Fast_Transfer(uint32_b2(smp1));
X USART_SPI_Fast_Transfer(uint32_b3(smp2));
X USART_SPI_Fast_Transfer(uint32_b2(smp2));
X //Now transmit two nibbles
X //After compilation check the generated code! It shouls use the "swap" instruction
X //to manipulate nibbles!!!
X USART_SPI_Fast_Transfer(
X (uint32_b1(smp1) & 0xf0) | //Upper nibble of 3rd byte of smp1
X ((uint32_b1(smp2) & 0xf0) >> 4) //Upper nibble of 3rd byte of smp2
X );
X }
X switch(packet_nr & 0x07) {
X case 0:
X USART_SPI_Fast_Transfer(0x01);
X break;
X case 1:
X USART_SPI_Fast_Transfer(read_switches()); //Scan switches every 8th packet!
X break;
X case 2:
X USART_SPI_Fast_Transfer(adc_val[0]);
X break;
X case 3:
X USART_SPI_Fast_Transfer(adc_val[1]);
X break;
X case 4:
X USART_SPI_Fast_Transfer(adc_val[2]);
X break;
X case 5:
X USART_SPI_Fast_Transfer(adc_val[3]);
X break;
X case 6:
X USART_SPI_Fast_Transfer(0);
X break;
X case 7:
X USART_SPI_Fast_Transfer(0);
X break;
X }
X // Now end until the data are really transmitted!
X USART_SPI_End_Fast_Transfer();
X set_cs(1);
X //set_ce(0);
X if((packet_nr & 0x07)==0x07) check_cfg_switches(); //We check for channel change request every 8th packet!
X packet_nr++;
X }
X }
}
SHAR_EOF
(set 20 11 01 19 12 55 06 'tx/adc.c'
eval "${shar_touch}") && \
chmod 0644 'tx/adc.c'
if test $? -ne 0
then ${echo} "restore of tx/adc.c failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx/adc.c': 'MD5 check failed'
) << \SHAR_EOF
1746aa4a2cbab8e85ad517704fce1ab9 tx/adc.c
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx/adc.c'` -ne 12499 && \
${echo} "restoration warning: size of 'tx/adc.c' is not 12499"
fi
fi
# ============= tx/abuf.h ==============
if test -f 'tx/abuf.h' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx/abuf.h (file already exists)"
else
${echo} "x - extracting tx/abuf.h (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx/abuf.h' &&
/*
X The code below is published as PUBLIC DOMAIN as Wojciech M. Zabolotny
X ( wzab<at>ise.pw.edu.pl ) 2011.01.11
X No warranty of any kind is provided! Use at your own risk!
*/
#define L2_ABUF_LEN 7
#define ABUF_LEN (1<<L2_ABUF_LEN)
X
SHAR_EOF
(set 20 11 01 15 14 36 27 'tx/abuf.h'
eval "${shar_touch}") && \
chmod 0644 'tx/abuf.h'
if test $? -ne 0
then ${echo} "restore of tx/abuf.h failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx/abuf.h': 'MD5 check failed'
) << \SHAR_EOF
63246d38e83672a13ce6bf4aa3095c13 tx/abuf.h
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx/abuf.h'` -ne 236 && \
${echo} "restoration warning: size of 'tx/abuf.h' is not 236"
fi
fi
# ============= tx/usart_spi_atmega32u2.h ==============
if test -f 'tx/usart_spi_atmega32u2.h' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx/usart_spi_atmega32u2.h (file already exists)"
else
${echo} "x - extracting tx/usart_spi_atmega32u2.h (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx/usart_spi_atmega32u2.h' &&
/*
X The code below is published as PUBLIC DOMAIN as Wojciech M. Zabolotny
X ( wzab<at>ise.pw.edu.pl ) 2011.01.11
X No warranty of any kind is provided! Use at your own risk!
*/
X
static inline uint8_t SPI_Transfer(uint8_t c)
{
X /* Wait for empty transmit buffer */
X while ( !( UCSR1A & (1<<UDRE1)) );
X /* Put data into buffer, sends the data */
X UDR1 = c;
X /* Wait for data to be received */
X while ( !(UCSR1A & (1<<RXC1)) );
X /* Get and return received data from buffer */
X return UDR1;
}
SHAR_EOF
(set 20 11 01 15 14 45 56 'tx/usart_spi_atmega32u2.h'
eval "${shar_touch}") && \
chmod 0644 'tx/usart_spi_atmega32u2.h'
if test $? -ne 0
then ${echo} "restore of tx/usart_spi_atmega32u2.h failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx/usart_spi_atmega32u2.h': 'MD5 check failed'
) << \SHAR_EOF
33fb242b7a80c1770eb8e16f5035dc5a tx/usart_spi_atmega32u2.h
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx/usart_spi_atmega32u2.h'` -ne 499 && \
${echo} "restoration warning: size of 'tx/usart_spi_atmega32u2.h' is not 499"
fi
fi
# ============= tx/usart_spi_atmega88.h ==============
if test -f 'tx/usart_spi_atmega88.h' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx/usart_spi_atmega88.h (file already exists)"
else
${echo} "x - extracting tx/usart_spi_atmega88.h (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx/usart_spi_atmega88.h' &&
X uint8_t dummy;
X const uint8_t status_mask=((1<<RXC0) | (1<<TXC0));
X /* Wait for data to be received and transmission completed
X Please note, that it is not enough to wait for availability
X of received data (RXC0), if you set SS high right after
X SS is set, you'll experience SPI frame error in the RFM70!
X I've lost quite a long time trying to debug this problem!!!
X */
X while ( (UCSR0A & status_mask) != status_mask ){};
X /* Flush received data from buffer */
X while (UCSR0A & (1<<RXC0)) dummy=UDR0;
}
X
static inline void USART_SPI_Init( unsigned int baud )
{
X UBRR0 = 0;
X /* Setting the XCKn port pin as output, enables master mode. */
X DDRD |= (1 << 4); // XCK1_DDR |= (1<<XCK1);
X /* Set MSPI mode of operation and SPI data mode 0. */
X UCSR0C = (1<<UMSEL01)|(1<<UMSEL00)|(0<<UCPHA0)|(0<<UCPOL0);
X /* Enable receiver and transmitter. */
X UCSR0B = (1<<RXEN0)|(1<<TXEN0);
X /* Set baud rate. */
X /* IMPORTANT: The Baud Rate must be set after the transmitter is enabled
X */
X UBRR0 = baud;
}
X
SHAR_EOF
(set 20 11 01 18 22 45 13 'tx/usart_spi_atmega88.h'
eval "${shar_touch}") && \
chmod 0644 'tx/usart_spi_atmega88.h'
if test $? -ne 0
then ${echo} "restore of tx/usart_spi_atmega88.h failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx/usart_spi_atmega88.h': 'MD5 check failed'
) << \SHAR_EOF
0656e2cb0b9b0650a01b5a68b93869c6 tx/usart_spi_atmega88.h
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx/usart_spi_atmega88.h'` -ne 2219 && \
${echo} "restoration warning: size of 'tx/usart_spi_atmega88.h' is not 2219"
fi
fi
# ============= tx/byte_select.h ==============
if test -f 'tx/byte_select.h' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx/byte_select.h (file already exists)"
else
${echo} "x - extracting tx/byte_select.h (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx/byte_select.h' &&
(set 20 11 01 15 14 39 11 'tx/byte_select.h'
eval "${shar_touch}") && \
chmod 0644 'tx/byte_select.h'
if test $? -ne 0
then ${echo} "restore of tx/byte_select.h failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx/byte_select.h': 'MD5 check failed'
) << \SHAR_EOF
30101dc3bea8fc2d95bbe9ae3345969f tx/byte_select.h
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx/byte_select.h'` -ne 938 && \
${echo} "restoration warning: size of 'tx/byte_select.h' is not 938"
fi
fi
# ============= tx/SPI_isr.S ==============
if test -f 'tx/SPI_isr.S' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx/SPI_isr.S (file already exists)"
else
${echo} "x - extracting tx/SPI_isr.S (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx/SPI_isr.S' &&
(set 20 11 01 18 23 34 03 'tx/SPI_isr.S'
eval "${shar_touch}") && \
chmod 0644 'tx/SPI_isr.S'
if test $? -ne 0
then ${echo} "restore of tx/SPI_isr.S failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx/SPI_isr.S': 'MD5 check failed'
) << \SHAR_EOF
5119ee0ffeda4d6dd0225e27dfc32e8b tx/SPI_isr.S
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx/SPI_isr.S'` -ne 3822 && \
${echo} "restoration warning: size of 'tx/SPI_isr.S' is not 3822"
fi
fi
# ============= customize.h ==============
if test -f 'customize.h' && test "$first_param" != -c; then
${echo} "x - SKIPPING customize.h (file already exists)"
else
${echo} "x - extracting customize.h (text)"
sed 's/^X//' << 'SHAR_EOF' > 'customize.h' &&
/*
X The code below is published as PUBLIC DOMAIN as Wojciech M. Zabolotny
X ( wzab<at>ise.pw.edu.pl ) 2011.01.11
X No warranty of any kind is provided! Use at your own risk!
*/
/*
X When you compile the firmware for another set of Rx/Tx, you should set the set number
X here (0x00-0xff) and the initial channel (0x00-0x52)
X */
#ifndef _CUSTOMIZE_H_
#define _CUSTOMIZE_H_
#define SET_NUMBER 0x21
#define INITIAL_CHANNEL 0x50
#endif
SHAR_EOF
(set 20 11 01 17 17 07 53 'customize.h'
eval "${shar_touch}") && \
chmod 0644 'customize.h'
if test $? -ne 0
then ${echo} "restore of customize.h failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'customize.h': 'MD5 check failed'
) << \SHAR_EOF
e0e5504b213e75d7c2629427abd8d28b customize.h
SHAR_EOF
else
test `LC_ALL=C wc -c < 'customize.h'` -ne 433 && \
${echo} "restoration warning: size of 'customize.h' is not 433"
fi
fi
The patch is below:
diff -c new/adc.c old/adc.c
*** new/adc.c 2011-01-21 22:24:14.000000000 +0100
--- old/adc.c 2011-01-19 12:55:06.000000000 +0100
***************
*** 397,414 ****
//Now transmit 10 ADC words
for(i=0;i<6;i++) {
int32_t smp1,smp2;
- // We should perform the regular downsampling, but I'm afraid,
- // that AVR's throughput may be too small for implementation
- // of the antialiasing filter
- // Therefore I simple take the mean value of two consecutive
samples
while(abuf_is_empty()) {};
! smp1 = abuf_get();
while(abuf_is_empty()) {};
! smp1 = (smp1>>1) + (abuf_get()>>1);
while(abuf_is_empty()) {};
! smp2 = abuf_get();
while(abuf_is_empty()) {};
! smp2 = (smp2>>1)+(abuf_get()>>1);
//Now pack two 20-bit samples into 5 bytes
//First transmit whole bytes
USART_SPI_Fast_Transfer(uint32_b3(smp1));
--- 397,410 ----
//Now transmit 10 ADC words
for(i=0;i<6;i++) {
int32_t smp1,smp2;
while(abuf_is_empty()) {};
! smp1 = abuf_get(); //discard this sample
while(abuf_is_empty()) {};
! smp1 = abuf_get();
while(abuf_is_empty()) {};
! smp2 = abuf_get(); //discard this sample
while(abuf_is_empty()) {};
! smp2 = abuf_get();
//Now pack two 20-bit samples into 5 bytes
//First transmit whole bytes
USART_SPI_Fast_Transfer(uint32_b3(smp1));
to:
#define PORT_BEEPER PORTD
#define PIN_NR_BEEPER 2
#define DDR_BEEPER DDRD
Of course you are free to use another free pin as well...
# ============= cs5343_4.brd ==============
if test -f 'cs5343_4.brd' && test "$first_param" != -c; then
${echo} "x - SKIPPING cs5343_4.brd (file already exists)"
else
${echo} "x - extracting cs5343_4.brd (text)"
sed 's/^X//' << 'SHAR_EOF' > 'cs5343_4.brd' &&
PCBNEW-BOARD Version 1 date nie, 20 lut 2011, 14:20:10
X
# Created by Pcbnew(2010-00-09 BZR 23xx)-stable
X
$GENERAL
LayerCount 2
Ly 1FFF8001
EnabledLayers 1FFF8001
Links 26
NoConn 0
Di 38424 25306 44676 32544
Ndraw 4
Ntrack 66
Nzone 0
BoardThickness 630
Nmodule 11
Nnets 11
$EndGENERAL
X
$SHEETDESCR
Sheet A4 11700 8267
Title ""
Date "20 feb 2011"
Rev ""
Comp ""
Comment1 ""
Comment2 ""
Comment3 ""
Comment4 ""
$EndSHEETDESCR
X
$SETUP
InternalUnit 0.000100 INCH
ZoneGridSize 250
Layers 2
Layer[0] Back signal
Layer[15] Front signal
TrackWidth 80
TrackWidthList 120
TrackClearence 100
ZoneClearence 500
TrackMinWidth 80
DrawSegmWidth 150
EdgeSegmWidth 150
ViaSize 350
ViaDrill 250
ViaMinSize 350
ViaMinDrill 200
MicroViaSize 200
MicroViaDrill 50
MicroViasAllowed 0
MicroViaMinSize 200
MicroViaMinDrill 50
TextPcbWidth 120
TextPcbSize 600 800
EdgeModWidth 150
TextModSize 600 600
TextModWidth 120
PadSize 600 600
PadDrill 320
Pad2MaskClearance 100
AuxiliaryAxisOrg 0 0
$EndSETUP
X
$EQUIPOT
Na 0 ""
St ~
$EndEQUIPOT
$EQUIPOT
Na 1 "GND"
St ~
$EndEQUIPOT
$EQUIPOT
Na 2 "N-000001"
St ~
$EndEQUIPOT
$EQUIPOT
Na 3 "N-000002"
St ~
$EndEQUIPOT
$EQUIPOT
Na 4 "N-000003"
St ~
$EndEQUIPOT
$EQUIPOT
Na 5 "N-000004"
St ~
$EndEQUIPOT
$EQUIPOT
Na 6 "N-000005"
St ~
$EndEQUIPOT
$EQUIPOT
Na 7 "N-000007"
St ~
$EndEQUIPOT
$EQUIPOT
Na 8 "N-000008"
St ~
$EndEQUIPOT
$EQUIPOT
Na 9 "N-000009"
St ~
$EndEQUIPOT
$EQUIPOT
Na 10 "N-000010"
St ~
$EndEQUIPOT
$NCLASS
Name "Default"
Desc "This is the default net class."
Clearance 100
TrackWidth 80
ViaDia 350
ViaDrill 250
uViaDia 200
uViaDrill 50
AddNet ""
AddNet "GND"
$EndNCLASS
$NCLASS
Name "precise"
Desc ""
Clearance 79
TrackWidth 80
ViaDia 350
ViaDrill 250
uViaDia 200
uViaDrill 50
AddNet "N-000001"
AddNet "N-000002"
AddNet "N-000003"
AddNet "N-000004"
AddNet "N-000005"
AddNet "N-000007"
AddNet "N-000008"
AddNet "N-000009"
AddNet "N-000010"
$EndNCLASS
$MODULE SIL-5
Po 42000 30800 0 15 4D1338D1 4D11FD3B ~~
Li SIL-5
Cd Connecteur 5 pins
Kw CONN DEV
Sc 4D11FD3B
AR /4D11FCE2
Op 0 0 0
T0 -2500 1250 681 428 0 107 N V 21 N"P2"
T1 -1750 -750 600 400 0 100 N I 21 N"CONN_5"
DS -3000 500 -3000 -500 120 21
DS -3000 -500 2000 -500 120 21
DS 2000 -500 2000 500 120 21
DS 2000 500 -3000 500 120 21
DS -2000 500 -2000 -500 120 21
$PAD
Sh "1" R 550 550 0 0 0
Dr 320 0 0
At STD N 00E0FFFF
Ne 7 "N-000007"
Po -2500 0
$EndPAD
$PAD
Sh "2" C 550 550 0 0 0
Dr 320 0 0
At STD N 00E0FFFF
Ne 1 "GND"
Po -1500 0
$EndPAD
$PAD
Sh "3" C 550 550 0 0 0
Dr 320 0 0
At STD N 00E0FFFF
Ne 2 "N-000001"
Po -500 0
$EndPAD
$PAD
Sh "4" C 550 550 0 0 0
Dr 320 0 0
At STD N 00E0FFFF
Ne 8 "N-000008"
Po 500 0
$EndPAD
$PAD
Sh "5" C 550 550 0 0 0
Dr 320 0 0
At STD N 00E0FFFF
Ne 10 "N-000010"
Po 1500 0
$EndPAD
$EndMODULE SIL-5
$MODULE SIL-5
Po 42000 26800 0 15 4D1338C6 4D11FD3D ~~
Li SIL-5
Cd Connecteur 5 pins
Kw CONN DEV
Sc 4D11FD3D
AR /4D11FCE8
Op 0 0 0
T0 -2500 -1000 681 428 0 107 N V 21 N"P1"
T1 -500 750 600 400 0 100 N I 21 N"CONN_5"
DS -3000 500 -3000 -500 120 21
DS -3000 -500 2000 -500 120 21
DS 2000 -500 2000 500 120 21
DS 2000 500 -3000 500 120 21
DS -2000 500 -2000 -500 120 21
$PAD
Sh "1" R 550 550 0 0 0
Dr 320 0 0
At STD N 00E0FFFF
Ne 6 "N-000005"
Po -2500 0
$EndPAD
$PAD
Sh "2" C 550 550 0 0 0
Dr 320 0 0
At STD N 00E0FFFF
Ne 5 "N-000004"
Po -1500 0
$EndPAD
$PAD
Sh "3" C 550 550 0 0 0
Dr 320 0 0
At STD N 00E0FFFF
Ne 4 "N-000003"
Po -500 0
$EndPAD
$PAD
Sh "4" C 550 550 0 0 0
Dr 320 0 0
At STD N 00E0FFFF
Ne 3 "N-000002"
Po 500 0
$EndPAD
$PAD
Sh "5" C 550 550 0 0 0
Dr 320 0 0
At STD N 00E0FFFF
Ne 9 "N-000009"
Po 1500 0
$EndPAD
$EndMODULE SIL-5
$MODULE TSSOP-10
Po 41500 28800 0 0 4D1338A5 4D13240C ~~
Li TSSOP-10
Sc 4D13240C
AR /4D11FCCB
Op 0 0 0
T0 1000 500 276 276 0 69 M V 20 N"U1"
T1 1500 -250 276 276 0 69 M V 20 N"CS5343"
DS -591 591 591 591 50 20
DS 591 591 591 -591 50 20
DS 591 -591 -591 -591 50 20
DS -591 -591 -591 591 50 20
DC -355 -355 -276 -355 50 20
$PAD
Sh "1" R 118 591 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 6 "N-000005"
Po -394 -925
X.LocalClearance 79
$EndPAD
$PAD
Sh "2" R 118 591 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 5 "N-000004"
Po -197 -925
X.LocalClearance 79
$EndPAD
$PAD
Sh "3" R 118 591 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 4 "N-000003"
Po 0 -925
X.LocalClearance 79
$EndPAD
$PAD
Sh "4" R 118 591 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 3 "N-000002"
Po 197 -925
X.LocalClearance 79
$EndPAD
$PAD
Sh "5" R 118 591 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 9 "N-000009"
Po 394 -925
X.LocalClearance 79
$EndPAD
$PAD
Sh "6" R 118 591 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 10 "N-000010"
Po 394 925
X.LocalClearance 79
$EndPAD
$PAD
Sh "7" R 118 591 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 8 "N-000008"
Po 197 925
X.LocalClearance 79
$EndPAD
$PAD
Sh "8" R 118 591 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 2 "N-000001"
Po 0 925
X.LocalClearance 79
$EndPAD
$PAD
Sh "9" R 118 591 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 1 "GND"
Po -197 925
X.LocalClearance 79
$EndPAD
$PAD
Sh "10" R 118 591 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 7 "N-000007"
Po -394 925
X.LocalClearance 79
$EndPAD
$EndMODULE TSSOP-10
$MODULE SM0805
Po 40250 29500 2700 0 42806E04 4D39EECA ~~
Li SM0805
Sc 4D39EECA
AR /4D39EC54
Op 0 0 0
At SMD
T0 0 0 250 250 2700 50 M V 20 N"C8"
T1 0 0 250 250 2700 50 M I 20 N"1u"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 2700
Dr 0 0 0
At SMD N 00440001
Ne 7 "N-000007"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 2700
Dr 0 0 0
At SMD N 00440001
Ne 1 "GND"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 39550 29500 2700 0 42806E04 4D39EECC ~~
Li SM0805
Sc 4D39EECC
AR /4D39EC4F
Op 0 0 0
At SMD
T0 0 0 250 250 2700 50 M V 20 N"C7"
T1 0 0 250 250 2700 50 M I 20 N"100n"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 2700
Dr 0 0 0
At SMD N 00440001
Ne 7 "N-000007"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 2700
Dr 0 0 0
At SMD N 00440001
Ne 1 "GND"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 44100 29650 900 0 42806E04 4D39EECE ~~
Li SM0805
Sc 4D39EECE
AR /4D39EBBD
Op 0 0 0
At SMD
T0 0 0 250 250 900 50 M V 20 N"C6"
T1 0 0 250 250 900 50 M I 20 N"1u"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 900
Dr 0 0 0
At SMD N 00440001
Ne 8 "N-000008"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 900
Dr 0 0 0
At SMD N 00440001
Ne 1 "GND"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 43350 29650 900 0 42806E04 4D39EED0 ~~
Li SM0805
Sc 4D39EED0
AR /4D39EBB6
Op 0 0 0
At SMD
T0 0 0 250 250 900 50 M V 20 N"C5"
T1 0 0 250 250 900 50 M I 20 N"100n"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 900
Dr 0 0 0
At SMD N 00440001
Ne 8 "N-000008"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 900
Dr 0 0 0
At SMD N 00440001
Ne 1 "GND"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 42500 29650 900 0 42806E04 4D39EED2 ~~
Li SM0805
Sc 4D39EED2
AR /4D39EBA0
Op 0 0 0
At SMD
T0 0 0 250 250 900 50 M V 20 N"C4"
T1 0 0 250 250 900 50 M I 20 N"180p"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 900
Dr 0 0 0
At SMD N 00440001
Ne 10 "N-000010"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 900
Dr 0 0 0
At SMD N 00440001
Ne 1 "GND"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 40950 31500 1800 0 42806E04 4D39EED4 ~~
Li SM0805
Sc 4D39EED4
AR /4D39EB9A
Op 0 0 0
At SMD
T0 0 0 250 250 1800 50 M V 20 N"C3"
T1 0 0 250 250 1800 50 M I 20 N"180p"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 1800
Dr 0 0 0
At SMD N 00440001
Ne 2 "N-000001"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 1800
Dr 0 0 0
At SMD N 00440001
Ne 1 "GND"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 43150 28500 0 0 42806E04 4D39EED6 ~~
Li SM0805
Sc 4D39EED6
AR /4D39EBA9
Op 0 0 0
At SMD
T0 0 0 250 250 0 50 M V 20 N"C2"
T1 0 0 250 250 0 50 M I 20 N"1u"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 9 "N-000009"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 1 "GND"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 43150 27750 0 0 42806E04 4D39EED8 ~~
Li SM0805
Sc 4D39EED8
AR /4D39EBB0
Op 0 0 0
At SMD
T0 0 0 250 250 0 50 M V 20 N"C1"
T1 0 0 250 250 0 50 M I 20 N"100n"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 9 "N-000009"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 1 "GND"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$DRAWSEGMENT
Po 0 38500 26000 38500 32000 150
De 28 0 900 0 0
$EndDRAWSEGMENT
$DRAWSEGMENT
Po 0 44600 26000 38500 26000 150
De 28 0 900 0 0
$EndDRAWSEGMENT
$DRAWSEGMENT
Po 0 44600 32000 44600 26000 150
De 28 0 900 0 0
$EndDRAWSEGMENT
$DRAWSEGMENT
Po 0 38500 32000 44600 32000 150
De 28 0 900 0 0
$EndDRAWSEGMENT
$TRACK
Po 0 40250 29875 39550 29875 120 -1
De 0 0 1 0 C00
Po 0 43525 28500 43525 27750 80 -1
De 0 0 1 0 C00
Po 0 43350 29275 43350 29200 120 -1
De 0 0 1 0 800
Po 0 43350 29200 43525 29025 120 -1
De 0 0 1 0 0
Po 0 43525 29025 43525 28500 120 -1
De 0 0 1 0 400
Po 0 43350 29275 44100 29275 120 -1
De 0 0 1 0 C00
Po 0 42500 29275 43350 29275 120 -1
De 0 0 1 0 C00
Po 0 41303 29725 41303 29247 120 -1
De 0 0 1 0 800
Po 0 41303 29247 41450 29100 120 -1
De 0 0 1 0 0
Po 0 41450 29100 42325 29100 120 -1
De 0 0 1 0 0
Po 0 42325 29100 42500 29275 120 -1
De 0 0 1 0 400
Po 0 40500 30800 40500 31425 120 -1
De 0 0 1 0 800
Po 0 40500 31425 40575 31500 120 -1
De 0 0 1 0 400
Po 0 39550 29875 40350 29875 120 -1
De 0 0 1 0 800
Po 0 40350 29875 40500 30025 120 -1
De 0 0 1 0 0
Po 0 40500 30025 40500 30300 120 -1
De 0 0 1 0 0
Po 0 40500 30300 40500 30800 120 -1
De 0 0 1 0 400
Po 0 41303 29725 41303 30247 80 -1
De 0 0 1 0 800
Po 0 41250 30300 40500 30300 80 -1
De 0 0 1 0 0
Po 0 41303 30247 41250 30300 80 -1
De 0 0 1 0 0
Po 0 41500 30800 41500 31325 120 -1
De 0 0 2 0 800
Po 0 41500 31325 41325 31500 120 -1
De 0 0 2 0 400
Po 0 41500 29725 41500 30800 80 -1
De 0 0 2 0 C00
Po 0 41697 27875 41697 27353 80 -1
De 0 0 3 0 800
Po 0 42250 26800 42500 26800 80 -1
De 0 0 3 0 400
Po 0 41697 27353 42250 26800 120 -1
De 0 0 3 0 0
Po 0 41500 27875 41500 26800 80 -1
De 0 0 4 0 C00
Po 0 41303 27875 41303 27353 80 -1
De 0 0 5 0 800
Po 0 40750 26800 40500 26800 80 -1
De 0 0 5 0 400
Po 0 41303 27353 40750 26800 120 -1
De 0 0 5 0 0
Po 0 41106 27875 40575 27875 120 -1
De 0 0 6 0 800
Po 0 40575 27875 39500 26800 120 -1
De 0 0 6 0 400
Po 0 39550 29125 39125 29125 120 -1
De 0 0 7 0 800
Po 0 39400 30800 39500 30800 120 -1
De 0 0 7 0 400
Po 0 38950 30350 39400 30800 120 -1
De 0 0 7 0 0
Po 0 38950 29300 38950 30350 120 -1
De 0 0 7 0 0
Po 0 39125 29125 38950 29300 120 -1
De 0 0 7 0 0
Po 0 40250 29125 39550 29125 120 -1
De 0 0 7 0 C00
Po 0 41106 29725 41106 29506 120 -1
De 0 0 7 0 800
Po 0 40725 29125 40250 29125 120 -1
De 0 0 7 0 400
Po 0 41106 29506 40725 29125 120 -1
De 0 0 7 0 0
Po 0 44100 30025 44100 31150 120 -1
De 0 0 8 0 800
Po 0 43050 31350 42500 30800 120 -1
De 0 0 8 0 400
Po 0 43900 31350 43050 31350 120 -1
De 0 0 8 0 0
Po 0 44100 31150 43900 31350 120 -1
De 0 0 8 0 0
Po 0 43350 30025 44100 30025 120 -1
De 0 0 8 0 C00
Po 0 41697 29725 41697 30247 80 -1
De 0 0 8 0 800
Po 0 41697 30247 42250 30800 120 -1
De 0 0 8 0 0
Po 0 42250 30800 42500 30800 80 -1
De 0 0 8 0 400
Po 0 42775 28500 42775 27750 120 -1
De 0 0 9 0 C00
Po 0 42775 27750 42650 27875 120 -1
De 0 0 9 0 800
Po 0 42650 27875 42425 27875 120 -1
De 0 0 9 0 0
Po 0 42425 27875 42400 27900 120 -1
De 0 0 9 0 0
Po 0 42400 27900 42400 27875 120 -1
De 0 0 9 0 0
Po 0 41894 27875 42400 27875 120 -1
De 0 0 9 0 800
Po 0 42400 27875 42650 27875 120 -1
De 0 0 9 0 0
Po 0 42950 27350 43500 26800 120 -1
De 0 0 9 0 400
Po 0 42950 27575 42950 27350 120 -1
De 0 0 9 0 0
Po 0 42650 27875 42950 27575 120 -1
De 0 0 9 0 0
Po 0 42500 30025 42175 30025 120 -1
De 0 0 10 0 800
Po 0 42175 30025 42125 29975 120 -1
De 0 0 10 0 0
Po 0 41894 29725 41894 29744 120 -1
De 0 0 10 0 800
Po 0 41894 29744 42125 29975 120 -1
De 0 0 10 0 0
Po 0 42125 29975 42425 29975 120 -1
De 0 0 10 0 0
Po 0 42425 29975 43250 30800 120 -1
De 0 0 10 0 0
Po 0 43250 30800 43500 30800 120 -1
De 0 0 10 0 400
$EndTRACK
$ZONE
$EndZONE
$CZONE_OUTLINE
ZInfo 4D39F219 1 "GND"
ZLayer 0
ZAux 10 F
ZClearance 500 I
ZMinThickness 100
ZOptions 1 16 F 200 200
ZCorner 39600 27500 0
ZCorner 40500 28400 0
ZCorner 41800 28400 0
ZCorner 42000 28550 0
ZCorner 42000 29100 0
ZCorner 41400 29100 0
ZCorner 40700 28700 0
ZCorner 38900 28700 0
ZCorner 38700 28450 0
ZCorner 38700 27500 1
$endCZONE_OUTLINE
$EndBOARD
SHAR_EOF
(set 20 11 02 21 09 02 07 'cs5343_4.brd'
eval "${shar_touch}") && \
chmod 0644 'cs5343_4.brd'
if test $? -ne 0
then ${echo} "restore of cs5343_4.brd failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'cs5343_4.brd': 'MD5 check failed'
) << \SHAR_EOF
a7a743602d405c354e453ca9b262b3d4 cs5343_4.brd
SHAR_EOF
else
test `LC_ALL=C wc -c < 'cs5343_4.brd'` -ne 14596 && \
${echo} "restoration warning: size of 'cs5343_4.brd' is not 14596"
fi
fi
# ============= cs5343_4-cache.lib ==============
if test -f 'cs5343_4-cache.lib' && test "$first_param" != -c; then
${echo} "x - SKIPPING cs5343_4-cache.lib (file already exists)"
else
${echo} "x - extracting cs5343_4-cache.lib (text)"
sed 's/^X//' << 'SHAR_EOF' > 'cs5343_4-cache.lib' &&
EESchema-LIBRARY Version 2.3 Date: nie, 30 sty 2011, 13:31:02
#
# C
#
DEF C C 0 10 N Y 1 F N
F0 "C" 50 100 50 H V L CNN
F1 "C" 50 -100 50 H V L CNN
$FPLIST
X SM*
X C?
X C1-1
$ENDFPLIST
DRAW
P 2 0 1 10 -100 -30 100 -30 N
P 2 0 1 10 -100 30 100 30 N
XX ~ 1 0 200 170 D 40 40 1 1 P
XX ~ 2 0 -200 170 U 40 40 1 1 P
ENDDRAW
ENDDEF
#
# CONN_5
#
DEF CONN_5 P 0 40 Y Y 1 F N
F0 "P" -50 0 50 V V C CNN
F1 "CONN_5" 50 0 50 V V C CNN
DRAW
S -100 250 100 -250 0 1 0 f
XX ~ 1 -400 200 300 R 60 60 1 1 P I
XX ~ 2 -400 100 300 R 60 60 1 1 P I
XX ~ 3 -400 0 300 R 60 60 1 1 P I
XX ~ 4 -400 -100 300 R 60 60 1 1 P I
XX ~ 5 -400 -200 300 R 60 60 1 1 P I
ENDDRAW
ENDDEF
#
# CS5343
#
DEF CS5343 U 0 40 Y Y 1 F N
F0 "U" 0 -350 60 H V C CNN
F1 "CS5343" 0 350 60 H V C CNN
F2 "TSSOP-10" -100 -450 60 H I C CNN
F3 "www.cirrus.com/en/pubs/proDatasheet/CS5343_F3.pdf" 50 -550 60 H I C CNN
DRAW
S -250 300 300 -300 0 1 0 N
XX SDOUT 1 -550 200 300 R 50 50 1 1 O
XX SCLK 2 -550 100 300 R 50 50 1 1 B
XX LRCK 3 -550 0 300 R 50 50 1 1 B
XX MCLK 4 -550 -100 300 R 50 50 1 1 I
XX FILT+ 5 -550 -200 300 R 50 50 1 1 O
XX AINL 6 600 -200 300 L 50 50 1 1 I
XX VQ 7 600 -100 300 L 50 50 1 1 O
XX AINR 8 600 0 300 L 50 50 1 1 I
XX GND 9 600 100 300 L 50 50 1 1 W
XX VA 10 600 200 300 L 50 50 1 1 W
ENDDRAW
ENDDEF
#
# GND
#
DEF ~GND #PWR 0 0 Y Y 1 F P
F0 "#PWR" 0 0 30 H I C CNN
F1 "GND" 0 -70 30 H I C CNN
DRAW
P 4 0 1 0 -50 0 0 -50 50 0 -50 0 N
XX GND 1 0 0 0 U 30 30 1 1 W N
ENDDRAW
ENDDEF
#
#End Library
SHAR_EOF
(set 20 11 01 30 21 00 06 'cs5343_4-cache.lib'
eval "${shar_touch}") && \
chmod 0644 'cs5343_4-cache.lib'
if test $? -ne 0
then ${echo} "restore of cs5343_4-cache.lib failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'cs5343_4-cache.lib': 'MD5 check failed'
) << \SHAR_EOF
df91d0567b597c92e9793f83b2782ee4 cs5343_4-cache.lib
SHAR_EOF
else
test `LC_ALL=C wc -c < 'cs5343_4-cache.lib'` -ne 1456 && \
${echo} "restoration warning: size of 'cs5343_4-cache.lib' is not 1456"
fi
fi
# ============= cs5343_4.sch ==============
if test -f 'cs5343_4.sch' && test "$first_param" != -c; then
${echo} "x - SKIPPING cs5343_4.sch (file already exists)"
else
${echo} "x - extracting cs5343_4.sch (text)"
sed 's/^X//' << 'SHAR_EOF' > 'cs5343_4.sch' &&
EESchema Schematic File Version 2 date nie, 30 sty 2011, 13:31:02
LIBS:power
LIBS:device
LIBS:transistors
LIBS:conn
LIBS:linear
LIBS:regul
LIBS:74xx
LIBS:cmos4000
LIBS:adc-dac
LIBS:memory
LIBS:xilinx
LIBS:special
LIBS:microcontrollers
LIBS:dsp
LIBS:microchip
LIBS:analog_switches
LIBS:motorola
LIBS:texas
LIBS:intel
LIBS:audio
LIBS:interface
LIBS:digital-audio
LIBS:philips
LIBS:display
LIBS:cypress
LIBS:siliconi
LIBS:opto
LIBS:atmel
LIBS:contrib
LIBS:valves
LIBS:cs5343_4
EELAYER 24 0
EELAYER END
$Descr A4 11700 8267
Sheet 1 1
Title ""
Date "21 jan 2011"
Rev ""
Comp ""
Comment1 ""
Comment2 ""
Comment3 ""
Comment4 ""
$EndDescr
Connection ~ 6250 1550
Wire Wire Line
X 6250 2050 6250 1550
Connection ~ 5650 1850
Wire Wire Line
X 5650 2050 5650 1850
Wire Wire Line
X 6250 2450 6250 2500
Wire Wire Line
X 5650 2450 5650 2500
Wire Wire Line
X 3100 2450 3100 2500
Connection ~ 2800 1950
Wire Wire Line
X 2800 2050 2800 1950
Connection ~ 4750 1750
Wire Wire Line
X 4750 2050 4750 1750
Wire Wire Line
X 5050 2450 5050 2500
Connection ~ 4450 1650
Wire Wire Line
X 4450 1650 4450 2350
Wire Wire Line
X 3200 1850 2750 1850
Wire Wire Line
X 3200 1650 2750 1650
Wire Wire Line
X 6850 1850 4350 1850
Wire Wire Line
X 4350 1750 6850 1750
Wire Wire Line
X 6850 1550 4350 1550
Wire Wire Line
X 6850 1650 4350 1650
Wire Wire Line
X 4350 1950 6850 1950
Wire Wire Line
X 3200 1550 2750 1550
Wire Wire Line
X 3200 1750 2750 1750
Wire Wire Line
X 2750 1950 3200 1950
Wire Wire Line
X 4750 2450 4750 2500
Wire Wire Line
X 5050 2050 5050 1950
Connection ~ 5050 1950
Wire Wire Line
X 3100 1950 3100 2050
Connection ~ 3100 1950
Wire Wire Line
X 2800 2450 2800 2500
Wire Wire Line
X 5350 2450 5350 2500
Wire Wire Line
X 5950 2450 5950 2500
Wire Wire Line
X 5350 2050 5350 1850
Connection ~ 5350 1850
Wire Wire Line
X 5950 2050 5950 1550
Connection ~ 5950 1550
$Comp
L GND #PWR01
U 1 1 4D39EC64
P 6250 2500
F 0 "#PWR01" H 6250 2500 30 0001 C CNN
F 1 "GND" H 6250 2430 30 0001 C CNN
X 1 6250 2500
X 1 0 0 -1
$EndComp
$Comp
L GND #PWR02
U 1 1 4D39EC63
P 5950 2500
F 0 "#PWR02" H 5950 2500 30 0001 C CNN
F 1 "GND" H 5950 2430 30 0001 C CNN
X 1 5950 2500
X 1 0 0 -1
$EndComp
$Comp
L C C8
U 1 1 4D39EC54
P 6250 2250
F 0 "C8" H 6300 2350 50 0000 L CNN
F 1 "1u" H 6300 2150 50 0000 L CNN
X 1 6250 2250
X 1 0 0 -1
$EndComp
$Comp
L C C7
U 1 1 4D39EC4F
P 5950 2250
F 0 "C7" H 6000 2350 50 0000 L CNN
F 1 "100n" H 6000 2150 50 0000 L CNN
X 1 5950 2250
X 1 0 0 -1
$EndComp
$Comp
L GND #PWR03
U 1 1 4D39EBDF
P 5350 2500
F 0 "#PWR03" H 5350 2500 30 0001 C CNN
F 1 "GND" H 5350 2430 30 0001 C CNN
X 1 5350 2500
X 1 0 0 -1
$EndComp
$Comp
L GND #PWR04
U 1 1 4D39EBDA
P 5650 2500
F 0 "#PWR04" H 5650 2500 30 0001 C CNN
F 1 "GND" H 5650 2430 30 0001 C CNN
X 1 5650 2500
X 1 0 0 -1
$EndComp
$Comp
L GND #PWR05
U 1 1 4D39EBD6
P 2800 2500
F 0 "#PWR05" H 2800 2500 30 0001 C CNN
F 1 "GND" H 2800 2430 30 0001 C CNN
X 1 2800 2500
X 1 0 0 -1
$EndComp
$Comp
L GND #PWR06
U 1 1 4D39EBD2
P 3100 2500
F 0 "#PWR06" H 3100 2500 30 0001 C CNN
F 1 "GND" H 3100 2430 30 0001 C CNN
X 1 3100 2500
X 1 0 0 -1
$EndComp
$Comp
L GND #PWR07
U 1 1 4D39EBCE
P 5050 2500
F 0 "#PWR07" H 5050 2500 30 0001 C CNN
F 1 "GND" H 5050 2430 30 0001 C CNN
X 1 5050 2500
X 1 0 0 -1
$EndComp
$Comp
L GND #PWR08
U 1 1 4D39EBCB
P 4750 2500
F 0 "#PWR08" H 4750 2500 30 0001 C CNN
F 1 "GND" H 4750 2430 30 0001 C CNN
X 1 4750 2500
X 1 0 0 -1
$EndComp
$Comp
L C C6
U 1 1 4D39EBBD
P 5650 2250
F 0 "C6" H 5700 2350 50 0000 L CNN
F 1 "1u" H 5700 2150 50 0000 L CNN
X 1 5650 2250
X 1 0 0 -1
$EndComp
$Comp
L C C5
U 1 1 4D39EBB6
P 5350 2250
F 0 "C5" H 5400 2350 50 0000 L CNN
F 1 "100n" H 5400 2150 50 0000 L CNN
X 1 5350 2250
X 1 0 0 -1
$EndComp
$Comp
L C C1
U 1 1 4D39EBB0
P 2800 2250
F 0 "C1" H 2850 2350 50 0000 L CNN
F 1 "100n" H 2850 2150 50 0000 L CNN
X 1 2800 2250
X 1 0 0 -1
$EndComp
$Comp
L C C2
U 1 1 4D39EBA9
P 3100 2250
F 0 "C2" H 3150 2350 50 0000 L CNN
F 1 "1u" H 3150 2150 50 0000 L CNN
X 1 3100 2250
X 1 0 0 -1
$EndComp
$Comp
L C C4
U 1 1 4D39EBA0
P 5050 2250
F 0 "C4" H 5100 2350 50 0000 L CNN
F 1 "180p" H 5100 2150 50 0000 L CNN
X 1 5050 2250
X 1 0 0 -1
$EndComp
$Comp
L C C3
U 1 1 4D39EB9A
P 4750 2250
F 0 "C3" H 4800 2350 50 0000 L CNN
F 1 "180p" H 4800 2150 50 0000 L CNN
X 1 4750 2250
X 1 0 0 -1
$EndComp
$Comp
L GND #PWR09
U 1 1 4D39EB78
P 4450 2350
F 0 "#PWR09" H 4450 2350 30 0001 C CNN
F 1 "GND" H 4450 2280 30 0001 C CNN
X 1 4450 2350
X 1 0 0 -1
$EndComp
$Comp
L CONN_5 P1
U 1 1 4D11FCE8
P 2350 1750
F 0 "P1" V 2300 1750 50 0000 C CNN
F 1 "CONN_5" V 2400 1750 50 0000 C CNN
X 1 2350 1750
X -1 0 0 -1
$EndComp
$Comp
L CONN_5 P2
U 1 1 4D11FCE2
P 7250 1750
F 0 "P2" V 7200 1750 50 0000 C CNN
F 1 "CONN_5" V 7300 1750 50 0000 C CNN
X 1 7250 1750
X 1 0 0 -1
$EndComp
$Comp
L CS5343 U1
U 1 1 4D11FCCB
P 3750 1750
F 0 "U1" H 3750 1400 60 0000 C CNN
F 1 "CS5343" H 3750 2100 60 0000 C CNN
F 2 "TSSOP-10" H 3650 1300 60 0001 C CNN
F 3 "www.cirrus.com/en/pubs/proDatasheet/CS5343_F3.pdf" H 3800 1200 60 0001 C CNN
X 1 3750 1750
X 1 0 0 -1
$EndComp
$EndSCHEMATC
SHAR_EOF
(set 20 11 01 30 21 00 06 'cs5343_4.sch'
eval "${shar_touch}") && \
chmod 0644 'cs5343_4.sch'
if test $? -ne 0
then ${echo} "restore of cs5343_4.sch failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'cs5343_4.sch': 'MD5 check failed'
) << \SHAR_EOF
a240901538844771bea66bf0e64b88d9 cs5343_4.sch
SHAR_EOF
else
test `LC_ALL=C wc -c < 'cs5343_4.sch'` -ne 5246 && \
${echo} "restoration warning: size of 'cs5343_4.sch' is not 5246"
fi
fi
# ============= tx.brd ==============
if test -f 'tx.brd' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx.brd (file already exists)"
else
${echo} "x - extracting tx.brd (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx.brd' &&
PCBNEW-BOARD Version 1 date wto, 1 mar 2011, 11:37:21
X
# Created by Pcbnew(2010-00-09 BZR 23xx)-stable
X
$GENERAL
LayerCount 2
Ly 1FFF8001
EnabledLayers 1FFF8001
Links 135
NoConn 0
Di 39159 37825 62674 67543
Ndraw 17
Ntrack 673
Nzone 0
BoardThickness 630
Nmodule 60
Nnets 51
$EndGENERAL
X
$SHEETDESCR
Sheet A4 11700 8267
Title ""
Date "1 mar 2011"
Rev ""
Comp ""
Comment1 ""
Comment2 ""
Comment3 ""
Comment4 ""
$EndSHEETDESCR
X
$SETUP
InternalUnit 0.000100 INCH
ZoneGridSize 250
Layers 2
Layer[0] Back signal
Layer[15] Front signal
TrackWidth 80
TrackWidthList 120
TrackWidthList 300
TrackClearence 100
ZoneClearence 200
TrackMinWidth 80
DrawSegmWidth 150
EdgeSegmWidth 150
ViaSize 350
ViaDrill 250
ViaMinSize 350
ViaMinDrill 200
ViaSizeList 600 300
MicroViaSize 200
MicroViaDrill 50
MicroViasAllowed 0
MicroViaMinSize 200
MicroViaMinDrill 50
TextPcbWidth 120
TextPcbSize 600 800
EdgeModWidth 150
TextModSize 600 600
TextModWidth 120
PadSize 650 650
PadDrill 320
Pad2MaskClearance 100
AuxiliaryAxisOrg 0 0
$EndSETUP
X
$EQUIPOT
Na 0 ""
St ~
$EndEQUIPOT
$EQUIPOT
Na 1 "GND"
St ~
$EndEQUIPOT
$EQUIPOT
Na 2 "N-000001"
St ~
$EndEQUIPOT
$EQUIPOT
Na 3 "N-000002"
St ~
$EndEQUIPOT
$EQUIPOT
Na 4 "N-000003"
St ~
$EndEQUIPOT
$EQUIPOT
Na 5 "N-000004"
St ~
$EndEQUIPOT
$EQUIPOT
Na 6 "N-000005"
St ~
$EndEQUIPOT
$EQUIPOT
Na 7 "N-000006"
St ~
$EndEQUIPOT
$EQUIPOT
Na 8 "N-000007"
St ~
$EndEQUIPOT
$EQUIPOT
Na 9 "N-000010"
St ~
$EndEQUIPOT
$EQUIPOT
Na 10 "N-000011"
St ~
$EndEQUIPOT
$EQUIPOT
Na 11 "N-000012"
St ~
$EndEQUIPOT
$EQUIPOT
Na 12 "N-000013"
St ~
$EndEQUIPOT
$EQUIPOT
Na 13 "N-000014"
St ~
$EndEQUIPOT
$EQUIPOT
Na 14 "N-000015"
St ~
$EndEQUIPOT
$EQUIPOT
Na 15 "N-000016"
St ~
$EndEQUIPOT
$EQUIPOT
Na 16 "N-000017"
St ~
$EndEQUIPOT
$EQUIPOT
Na 17 "N-000018"
St ~
$EndEQUIPOT
$EQUIPOT
Na 18 "N-000019"
St ~
$EndEQUIPOT
$EQUIPOT
Na 19 "N-000020"
St ~
$EndEQUIPOT
$EQUIPOT
Na 20 "N-000021"
St ~
$EndEQUIPOT
$EQUIPOT
Na 21 "N-000022"
St ~
$EndEQUIPOT
$EQUIPOT
Na 22 "N-000023"
St ~
$EndEQUIPOT
$EQUIPOT
Na 23 "N-000024"
St ~
$EndEQUIPOT
$EQUIPOT
Na 24 "N-000025"
St ~
$EndEQUIPOT
$EQUIPOT
Na 25 "N-000026"
St ~
$EndEQUIPOT
$EQUIPOT
Na 26 "N-000027"
St ~
$EndEQUIPOT
$EQUIPOT
Na 27 "N-000028"
St ~
$EndEQUIPOT
$EQUIPOT
Na 28 "N-000029"
St ~
$EndEQUIPOT
$EQUIPOT
Na 29 "N-000030"
St ~
$EndEQUIPOT
$EQUIPOT
Na 30 "N-000031"
St ~
$EndEQUIPOT
$EQUIPOT
Na 31 "N-000032"
St ~
$EndEQUIPOT
$EQUIPOT
Na 32 "N-000033"
St ~
$EndEQUIPOT
$EQUIPOT
Na 33 "N-000034"
St ~
$EndEQUIPOT
$EQUIPOT
Na 34 "N-000036"
St ~
$EndEQUIPOT
$EQUIPOT
Na 35 "N-000037"
St ~
$EndEQUIPOT
$EQUIPOT
Na 36 "N-000042"
St ~
$EndEQUIPOT
$EQUIPOT
Na 37 "N-000043"
St ~
$EndEQUIPOT
$EQUIPOT
Na 38 "N-000044"
St ~
$EndEQUIPOT
$EQUIPOT
Na 39 "N-000045"
St ~
$EndEQUIPOT
$EQUIPOT
Na 40 "N-000046"
St ~
$EndEQUIPOT
$EQUIPOT
Na 41 "N-000047"
St ~
$EndEQUIPOT
$EQUIPOT
Na 42 "N-000048"
St ~
$EndEQUIPOT
$EQUIPOT
Na 43 "N-000049"
St ~
$EndEQUIPOT
$EQUIPOT
Na 44 "N-000050"
St ~
$EndEQUIPOT
$EQUIPOT
Na 45 "N-000051"
St ~
$EndEQUIPOT
$EQUIPOT
Na 46 "N-000053"
St ~
$EndEQUIPOT
$EQUIPOT
Na 47 "N-000054"
St ~
$EndEQUIPOT
$EQUIPOT
Na 48 "N-000056"
St ~
$EndEQUIPOT
$EQUIPOT
Na 49 "N-000057"
St ~
$EndEQUIPOT
$EQUIPOT
Na 50 "N-000058"
St ~
$EndEQUIPOT
$NCLASS
Name "Default"
Desc "This is the default net class."
Clearance 100
TrackWidth 80
ViaDia 350
ViaDrill 250
uViaDia 200
uViaDrill 50
AddNet ""
AddNet "GND"
AddNet "N-000001"
AddNet "N-000002"
AddNet "N-000003"
AddNet "N-000004"
AddNet "N-000005"
AddNet "N-000006"
AddNet "N-000007"
AddNet "N-000010"
AddNet "N-000011"
AddNet "N-000012"
AddNet "N-000013"
AddNet "N-000014"
AddNet "N-000015"
AddNet "N-000016"
AddNet "N-000017"
AddNet "N-000018"
AddNet "N-000019"
AddNet "N-000020"
AddNet "N-000021"
AddNet "N-000022"
AddNet "N-000023"
AddNet "N-000024"
AddNet "N-000025"
AddNet "N-000026"
AddNet "N-000027"
AddNet "N-000028"
AddNet "N-000029"
AddNet "N-000030"
AddNet "N-000031"
AddNet "N-000032"
AddNet "N-000033"
AddNet "N-000034"
AddNet "N-000036"
AddNet "N-000037"
AddNet "N-000042"
AddNet "N-000043"
AddNet "N-000044"
AddNet "N-000045"
AddNet "N-000046"
AddNet "N-000047"
AddNet "N-000048"
AddNet "N-000049"
AddNet "N-000050"
AddNet "N-000051"
AddNet "N-000053"
AddNet "N-000054"
AddNet "N-000056"
AddNet "N-000057"
AddNet "N-000058"
$EndNCLASS
$MODULE CS5343_4-DTBRD
Po 58000 55250 2700 15 4D458905 4D5805CA ~~
Li CS5343_4-DTBRD
Sc 4D5805CA
AR /4D235F4E
Op 0 0 0
T0 0 -3000 600 600 2700 120 N V 21 N"U4"
T1 -1000 3000 600 600 2700 120 N V 21 N"CS5343/4_-_daughterboard"
DS -3000 -3000 3000 -3000 150 21
DS 3000 -3000 3000 3000 150 21
DS 3000 3000 -3000 3000 150 21
DS -3000 3000 -3000 -3000 150 21
$PAD
Sh "1" O 630 830 0 0 2700
Dr 300 0 0
At STD N 00E0FFFF
Ne 47 "N-000054"
Po -2000 2000
$EndPAD
$PAD
Sh "2" O 630 830 0 0 2700
Dr 300 0 0
At STD N 00E0FFFF
Ne 50 "N-000058"
Po -1000 2000
$EndPAD
$PAD
Sh "3" O 630 830 0 0 2700
Dr 300 0 0
At STD N 00E0FFFF
Ne 32 "N-000033"
Po 0 2000
$EndPAD
$PAD
Sh "4" O 630 830 0 0 2700
Dr 300 0 0
At STD N 00E0FFFF
Ne 44 "N-000050"
Po 1000 2000
$EndPAD
$PAD
Sh "5" O 630 830 0 0 2700
Dr 300 0 0
At STD N 00E0FFFF
Ne 0 ""
Po 2000 2000
$EndPAD
$PAD
Sh "6" O 630 830 0 0 2700
Dr 300 0 0
At STD N 00E0FFFF
Ne 26 "N-000027"
Po 2000 -2000
$EndPAD
$PAD
Sh "7" O 630 830 0 0 2700
Dr 300 0 0
At STD N 00E0FFFF
Ne 0 ""
Po 1000 -2000
$EndPAD
$PAD
Sh "8" O 630 830 0 0 2700
Dr 300 0 0
At STD N 00E0FFFF
Ne 31 "N-000032"
Po 0 -2000
$EndPAD
$PAD
Sh "9" O 630 830 0 0 2700
Dr 300 0 0
At STD N 00E0FFFF
Ne 1 "GND"
Po -1000 -2000
$EndPAD
$PAD
Sh "10" O 630 830 0 0 2700
Dr 300 0 0
At STD N 00E0FFFF
Ne 46 "N-000053"
Po -2000 -2000
$EndPAD
$EndMODULE CS5343_4-DTBRD
$MODULE DIP-28__300
Po 49500 52750 2700 15 00200000 4D5805CB ~~
Li DIP-28__300
Cd 28 pins DIL package, round pads, width 300mil
Kw DIL
Sc 4D5805CB
AR /4D235D02
Op 0 0 0
T0 -4500 0 600 450 2700 113 N V 21 N"U2"
T1 4000 0 600 450 2700 113 N V 21 N"ATMEGA88"
DS -7500 -1000 7500 -1000 150 21
DS 7500 -1000 7500 1000 150 21
DS 7500 1000 -7500 1000 150 21
DS -7500 1000 -7500 -1000 150 21
DS -7500 -500 -7000 -500 150 21
DS -7000 -500 -7000 500 150 21
DS -7000 500 -7500 500 150 21
$PAD
Sh "2" C 550 550 0 0 2700
Dr 320 0 0
At STD N 00E0FFFF
Ne 18 "N-000019"
Po -5500 1500
$EndPAD
$PAD
Sh "3" C 550 550 0 0 2700
Dr 320 0 0
At STD N 00E0FFFF
Ne 17 "N-000018"
Po -4500 1500
$EndPAD
$PAD
Sh "4" C 550 550 0 0 2700
Dr 320 0 0
At STD N 00E0FFFF
Ne 16 "N-000017"
Po -3500 1500
$EndPAD
$PAD
Sh "5" C 550 550 0 0 2700
Dr 320 0 0
At STD N 00E0FFFF
Ne 28 "N-000029"
Po -2500 1500
$EndPAD
$PAD
Sh "6" C 550 550 0 0 2700
Dr 320 0 0
At STD N 00E0FFFF
Ne 29 "N-000030"
Po -1500 1500
$EndPAD
$PAD
Sh "7" C 550 550 0 0 2700
Dr 320 0 0
At STD N 00E0FFFF
Ne 3 "N-000002"
Po -500 1500
$EndPAD
$PAD
Sh "8" C 550 550 0 0 2700
Dr 320 0 0
At STD N 00E0FFFF
Ne 1 "GND"
Po 500 1500
$EndPAD
$PAD
Sh "9" C 550 550 0 0 2700
Dr 320 0 0
At STD N 00E0FFFF
Ne 15 "N-000016"
Po 1500 1500
$EndPAD
$PAD
Sh "10" C 550 550 0 0 2700
Dr 320 0 0
At STD N 00E0FFFF
Ne 30 "N-000031"
Po 2500 1500
$EndPAD
$PAD
Sh "11" C 550 550 0 0 2700
Dr 320 0 0
At STD N 00E0FFFF
Ne 35 "N-000037"
Po 3500 1500
$EndPAD
$PAD
Sh "12" C 550 550 0 0 2700
Dr 320 0 0
At STD N 00E0FFFF
Ne 2 "N-000001"
Po 4500 1500
$EndPAD
$PAD
Sh "13" C 550 550 0 0 2700
Dr 320 0 0
At STD N 00E0FFFF
Ne 11 "N-000012"
Po 5500 1500
$EndPAD
$PAD
Sh "14" C 550 550 0 0 2700
Dr 320 0 0
At STD N 00E0FFFF
Ne 44 "N-000050"
Po 6500 1500
$EndPAD
$PAD
Sh "1" R 550 550 0 0 2700
Dr 320 0 0
At STD N 00E0FFFF
Ne 8 "N-000007"
Po -6500 1500
$EndPAD
$PAD
Sh "15" C 550 550 0 0 2700
Dr 320 0 0
At STD N 00E0FFFF
Ne 10 "N-000011"
Po 6500 -1500
$EndPAD
$PAD
Sh "16" C 550 550 0 0 2700
Dr 320 0 0
At STD N 00E0FFFF
Ne 32 "N-000033"
Po 5500 -1500
$EndPAD
$PAD
Sh "17" C 550 550 0 0 2700
Dr 320 0 0
At STD N 00E0FFFF
Ne 7 "N-000006"
Po 4500 -1500
$EndPAD
$PAD
Sh "18" C 550 550 0 0 2700
Dr 320 0 0
At STD N 00E0FFFF
Ne 43 "N-000049"
Po 3500 -1500
$EndPAD
$PAD
Sh "19" C 550 550 0 0 2700
Dr 320 0 0
At STD N 00E0FFFF
Ne 23 "N-000024"
Po 2500 -1500
$EndPAD
$PAD
Sh "20" C 550 550 0 0 2700
Dr 320 0 0
At STD N 00E0FFFF
Ne 3 "N-000002"
Po 1500 -1500
$EndPAD
$PAD
Sh "21" C 550 550 0 0 2700
Dr 320 0 0
At STD N 00E0FFFF
Ne 25 "N-000026"
Po 500 -1500
$EndPAD
$PAD
Sh "22" C 550 550 0 0 2700
Dr 320 0 0
At STD N 00E0FFFF
Ne 1 "GND"
Po -500 -1500
$EndPAD
$PAD
Sh "23" C 550 550 0 0 2700
Dr 320 0 0
At STD N 00E0FFFF
Ne 6 "N-000005"
Po -1500 -1500
$EndPAD
$PAD
Sh "24" C 550 550 0 0 2700
Dr 320 0 0
At STD N 00E0FFFF
Ne 5 "N-000004"
Po -2500 -1500
$EndPAD
$PAD
Sh "25" C 550 550 0 0 2700
Dr 320 0 0
At STD N 00E0FFFF
Ne 4 "N-000003"
Po -3500 -1500
$EndPAD
$PAD
Sh "26" C 550 550 0 0 2700
Dr 320 0 0
At STD N 00E0FFFF
Ne 14 "N-000015"
Po -4500 -1500
$EndPAD
$PAD
Sh "27" C 550 550 0 0 2700
Dr 320 0 0
At STD N 00E0FFFF
Ne 24 "N-000025"
Po -5500 -1500
$EndPAD
$PAD
Sh "28" C 550 550 0 0 2700
Dr 320 0 0
At STD N 00E0FFFF
Ne 49 "N-000057"
Po -6500 -1500
$EndPAD
$SHAPE3D
Na "dil/dil_28-w300.wrl"
Sc 1.000000 1.000000 1.000000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE DIP-28__300
$MODULE HC-18UV
Po 46200 54600 2700 15 42899E71 4D5EC302 ~~
Li HC-18UV
Cd Quartz boitier HC-18U vertical
Kw QUARTZ DEV
Sc 4D5EC302
AR /4D5805E9
Op 0 A 0
T0 -50 -700 450 500 2700 60 N V 21 N"X1"
T1 0 650 450 500 2700 60 N V 21 N"CRYSTAL"
DS -2750 -500 -2250 -1000 60 21
DS 2250 -1000 2750 -500 60 21
DS 2750 500 2250 1000 60 21
DS -2750 500 -2250 1000 60 21
DS -2250 -1000 2250 -1000 60 21
DS -2750 -500 -2750 500 60 21
DS -2250 1000 2250 1000 60 21
DS 2750 500 2750 -500 60 21
$PAD
Sh "1" C 700 700 0 0 2700
Dr 320 0 0
At STD N 00E0FFFF
Ne 15 "N-000016"
Po -1000 0
$EndPAD
$PAD
Sh "2" C 700 700 0 0 2700
Dr 320 0 0
At STD N 00E0FFFF
Ne 30 "N-000031"
Po 1000 0
$EndPAD
$SHAPE3D
Na "discret/crystal_hc18u_vertical.wrl"
Sc 1.000000 1.000000 1.000000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE HC-18UV
$MODULE Inductor_CDRH6D28
Po 47250 65000 0 0 49EFCDFB 4D5805CD ~~
Li Inductor_CDRH6D28
Sc 4D5805CD
AR /4D57F421
Op 0 0 0
At SMD
T0 0 0 280 280 0 70 M V 20 N"L1"
T1 0 250 50 50 0 12 M I 20 N"INDUCTOR"
DC 0 0 0 1063 70 20
DS 1155 -1320 1320 -1320 70 20
DS 1320 -1320 1320 -1155 70 20
DS -1320 -1155 -1320 -1320 70 20
DS -1320 -1320 -1155 -1320 70 20
DS 1320 1155 1320 1320 70 20
DS 1320 1320 1155 1320 70 20
DS -1320 1320 -1155 1320 70 20
DS -1320 1320 -1320 1155 70 20
DS -1320 330 -1320 -330 70 20
DS 1320 330 1320 -330 70 20
$PAD
Sh "1" R 2874 1043 0 0 0
Dr 0 0 0
At STD N 00440001
Ne 48 "N-000056"
Po 0 915
$EndPAD
$PAD
Sh "2" R 2874 1043 0 0 0
Dr 0 0 0
At STD N 00440001
Ne 19 "N-000020"
Po 0 -915
$EndPAD
$EndMODULE Inductor_CDRH6D28
$MODULE LED-3MM
Po 60750 48500 900 0 49BFA23B 4D5FF684 ~~
Li LED-3MM
Cd LED 3mm - Lead pitch 100mil (2,54mm)
Kw LED led 3mm 3MM 100mil 2,54mm
Sc 4D5FF684
AR /4D57C2DF
Op 0 0 0
At VIRTUAL
T0 700 1100 300 300 900 35 M V 20 N"D3"
T1 0 -1000 300 300 900 35 M V 20 N"LED"
DS 720 -500 720 500 100 20
DA 100 0 -500 0 -3998 60 20
DA 100 0 -348 -398 -4016 60 20
DA 100 0 555 390 -4006 60 20
DA 100 0 700 0 -3998 60 20
DA 100 0 100 600 -4144 60 20
DA 100 0 -380 360 -4131 60 20
DA 100 0 573 -368 -4121 60 20
DA 100 0 100 -600 -4121 60 20
DA 100 0 -150 0 -4500 60 20
DA 100 0 -300 0 -4500 60 20
DA 100 0 350 0 -4500 60 20
DA 100 0 500 0 -4500 60 20
DA 100 0 100 800 -4101 100 20
DA 100 0 -605 376 -4219 100 20
DA 100 0 710 -516 -4097 100 20
DA 100 0 100 -800 -4202 100 20
DA 100 0 -700 0 -3883 100 20
DA 100 0 -581 -419 -3916 100 20
$PAD
Sh "1" C 660 660 0 0 900
Dr 320 0 0
At STD N 0054FFFF
Ne 3 "N-000002"
Po -500 0
$EndPAD
$PAD
Sh "2" C 660 660 0 0 900
Dr 320 0 0
At STD N 0054FFFF
Ne 39 "N-000045"
Po 500 0
$EndPAD
$SHAPE3D
Na "discret/leds/led3_vertical_verde.wrl"
Sc 1.000000 1.000000 1.000000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE LED-3MM
$MODULE LED-3MM
Po 56000 48500 900 0 49BFA23B 4D5805D0 ~~
Li LED-3MM
Cd LED 3mm - Lead pitch 100mil (2,54mm)
Kw LED led 3mm 3MM 100mil 2,54mm
Sc 4D5805D0
AR /4D57C2CE
Op 0 0 0
At VIRTUAL
T0 700 1100 300 300 900 35 M V 20 N"D2"
T1 0 -1000 300 300 900 35 M V 20 N"LED"
DS 720 -500 720 500 100 20
DA 100 0 -500 0 -3998 60 20
DA 100 0 -348 -398 -4016 60 20
DA 100 0 555 390 -4006 60 20
DA 100 0 700 0 -3998 60 20
DA 100 0 100 600 -4144 60 20
DA 100 0 -380 360 -4131 60 20
DA 100 0 573 -368 -4121 60 20
DA 100 0 100 -600 -4121 60 20
DA 100 0 -150 0 -4500 60 20
DA 100 0 -300 0 -4500 60 20
DA 100 0 350 0 -4500 60 20
DA 100 0 500 0 -4500 60 20
DA 100 0 100 800 -4101 100 20
DA 100 0 -605 376 -4219 100 20
DA 100 0 710 -516 -4097 100 20
DA 100 0 100 -800 -4202 100 20
DA 100 0 -700 0 -3883 100 20
DA 100 0 -581 -419 -3916 100 20
$PAD
Sh "1" C 660 660 0 0 900
Dr 320 0 0
At STD N 0054FFFF
Ne 3 "N-000002"
Po -500 0
$EndPAD
$PAD
Sh "2" C 660 660 0 0 900
Dr 320 0 0
At STD N 0054FFFF
Ne 38 "N-000044"
Po 500 0
$EndPAD
$SHAPE3D
Na "discret/leds/led3_vertical_verde.wrl"
Sc 1.000000 1.000000 1.000000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE LED-3MM
$MODULE LED-3MM
Po 44250 52750 2700 0 49BFA23B 4D5805D2 ~~
Li LED-3MM
Cd LED 3mm - Lead pitch 100mil (2,54mm)
Kw LED led 3mm 3MM 100mil 2,54mm
Sc 4D5805D2
AR /4D57C2E9
Op 0 0 0
At VIRTUAL
T0 700 1100 300 300 2700 35 M V 20 N"D1"
T1 0 -1000 300 300 2700 35 M V 20 N"LED"
DS 720 -500 720 500 100 20
DA 100 0 -500 0 -3998 60 20
DA 100 0 -348 -398 -4016 60 20
DA 100 0 555 390 -4006 60 20
DA 100 0 700 0 -3998 60 20
DA 100 0 100 600 -4144 60 20
DA 100 0 -380 360 -4131 60 20
DA 100 0 573 -368 -4121 60 20
DA 100 0 100 -600 -4121 60 20
DA 100 0 -150 0 -4500 60 20
DA 100 0 -300 0 -4500 60 20
DA 100 0 350 0 -4500 60 20
DA 100 0 500 0 -4500 60 20
DA 100 0 100 800 -4101 100 20
DA 100 0 -605 376 -4219 100 20
DA 100 0 710 -516 -4097 100 20
DA 100 0 100 -800 -4202 100 20
DA 100 0 -700 0 -3883 100 20
DA 100 0 -581 -419 -3916 100 20
$PAD
Sh "1" C 660 660 0 0 2700
Dr 320 0 0
At STD N 0054FFFF
Ne 3 "N-000002"
Po -500 0
$EndPAD
$PAD
Sh "2" C 660 660 0 0 2700
Dr 320 0 0
At STD N 0054FFFF
Ne 34 "N-000036"
Po 500 0
$EndPAD
$SHAPE3D
Na "discret/leds/led3_vertical_verde.wrl"
Sc 1.000000 1.000000 1.000000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE LED-3MM
$MODULE pin_array_6x2
Po 53000 56250 900 15 3FB38A8B 4D5805D3 ~~
Li pin_array_6x2
Cd Double rangee de contacts 2 x 6 pins
Kw CONN
Sc 4D5805D3
AR /4D4A7786
Op 0 0 0
T0 0 -1500 400 400 900 100 N V 21 N"P3"
T1 0 1500 400 400 900 80 N V 21 N"CONN_6X2"
DS -3000 -1000 3000 -1000 120 21
DS 3000 -1000 3000 1000 120 21
DS 3000 1000 -3000 1000 120 21
DS -3000 1000 -3000 -1000 120 21
$PAD
Sh "1" R 600 600 0 0 900
Dr 400 0 0
At STD N 00E0FFFF
Ne 0 ""
Po -2500 500
$EndPAD
$PAD
Sh "2" C 600 600 0 0 900
Dr 400 0 0
At STD N 00E0FFFF
Ne 8 "N-000007"
Po -2500 -500
$EndPAD
$PAD
Sh "3" C 600 600 0 0 900
Dr 400 0 0
At STD N 00E0FFFF
Ne 47 "N-000054"
Po -1500 500
$EndPAD
$PAD
Sh "4" C 600 600 0 0 900
Dr 400 0 0
At STD N 00E0FFFF
Ne 7 "N-000006"
Po -1500 -500
$EndPAD
$PAD
Sh "5" C 600 600 0 0 900
Dr 400 0 0
At STD N 00E0FFFF
Ne 0 ""
Po -500 500
$EndPAD
$PAD
Sh "6" C 600 600 0 0 900
Dr 400 0 0
At STD N 00E0FFFF
Ne 43 "N-000049"
Po -500 -500
$EndPAD
$PAD
Sh "7" C 600 600 0 0 900
Dr 400 0 0
At STD N 00E0FFFF
Ne 50 "N-000058"
Po 500 500
$EndPAD
$PAD
Sh "8" C 600 600 0 0 900
Dr 400 0 0
At STD N 00E0FFFF
Ne 23 "N-000024"
Po 500 -500
$EndPAD
$PAD
Sh "9" C 600 600 0 0 900
Dr 400 0 0
At STD N 00E0FFFF
Ne 0 ""
Po 1500 500
$EndPAD
$PAD
Sh "10" C 600 600 0 0 900
Dr 400 0 0
At STD N 00E0FFFF
Ne 1 "GND"
Po 1500 -500
$EndPAD
$PAD
Sh "11" C 600 600 0 0 900
Dr 400 0 0
At STD N 00E0FFFF
Ne 0 ""
Po 2500 500
$EndPAD
$PAD
Sh "12" C 600 600 0 0 900
Dr 400 0 0
At STD N 00E0FFFF
Ne 3 "N-000002"
Po 2500 -500
$EndPAD
$SHAPE3D
Na "pin_array/pins_array_6x2.wrl"
Sc 1.000000 1.000000 1.000000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE pin_array_6x2
$MODULE RFM70
Po 48750 44250 0 15 4D4C7606 4D5805D4 ~~
Li RFM70
Cd http://www.hoperf.com/rf_fsk/rfm70.htm
Sc 4D5805D4
AR /4D2358F4
Op 0 0 0
T0 0 -5250 600 600 0 120 N V 21 N"U1"
T1 -250 -4000 600 600 0 120 N V 21 N"RFM70"
DS -2500 500 2500 500 150 21
DS 2500 500 2500 -6250 150 21
DS 2500 -6250 -2500 -6250 150 21
DS -2500 -6250 -2500 500 150 21
$PAD
Sh "1" O 330 530 0 0 0
Dr 200 0 0
At STD N 00E0FFFF
Ne 0 ""
Po 1750 0
$EndPAD
$PAD
Sh "2" O 330 530 0 0 0
Dr 200 0 0
At STD N 00E0FFFF
Ne 18 "N-000019"
Po 1250 0
$EndPAD
$PAD
Sh "3" O 330 530 0 0 0
Dr 200 0 0
At STD N 00E0FFFF
Ne 17 "N-000018"
Po 750 0
$EndPAD
$PAD
Sh "4" O 330 530 0 0 0
Dr 200 0 0
At STD N 00E0FFFF
Ne 29 "N-000030"
Po 250 0
$EndPAD
$PAD
Sh "5" O 330 530 0 0 0
Dr 200 0 0
At STD N 00E0FFFF
Ne 28 "N-000029"
Po -250 0
$EndPAD
$PAD
Sh "6" O 330 530 0 0 0
Dr 200 0 0
At STD N 00E0FFFF
Ne 16 "N-000017"
Po -750 0
$EndPAD
$PAD
Sh "7" O 330 530 0 0 0
Dr 200 0 0
At STD N 00E0FFFF
Ne 33 "N-000034"
Po -1250 0
$EndPAD
$PAD
Sh "8" O 330 530 0 0 0
Dr 200 0 0
At STD N 00E0FFFF
Ne 1 "GND"
Po -1750 0
$EndPAD
$SHAPE3D
Na "RFM70.wrl"
Sc 1.000000 1.000000 1.000000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE RFM70
$MODULE SIL-2
Po 61000 51250 1800 15 00200000 4D5805D5 ~~
Li SIL-2
Cd Connecteurs 2 pins
Kw CONN DEV
Sc 4D5805D5
AR /4D2C254D
Op 0 0 0
T0 0 -1000 681 428 1800 107 N V 21 N"P4"
T1 0 -1000 600 400 1800 100 N I 21 N"CONN_2"
DS -1000 500 -1000 -500 120 21
DS -1000 -500 1000 -500 120 21
DS 1000 -500 1000 500 120 21
DS 1000 500 -1000 500 120 21
$PAD
Sh "1" R 550 550 0 0 1800
Dr 320 0 0
At STD N 00E0FFFF
Ne 36 "N-000042"
Po -500 0
$EndPAD
$PAD
Sh "2" C 550 550 0 0 1800
Dr 320 0 0
At STD N 00E0FFFF
Ne 1 "GND"
Po 500 0
$EndPAD
$EndMODULE SIL-2
$MODULE SIL-2
Po 44750 65250 2700 15 00200000 4D5805D7 ~~
Li SIL-2
Cd Connecteurs 2 pins
Kw CONN DEV
Sc 4D5805D7
AR /4D2C32D2
Op 0 0 0
T0 0 -1000 681 428 2700 107 N V 21 N"P2"
T1 0 -1000 600 400 2700 100 N I 21 N"CONN_2"
DS -1000 500 -1000 -500 120 21
DS -1000 -500 1000 -500 120 21
DS 1000 -500 1000 500 120 21
DS 1000 500 -1000 500 120 21
$PAD
Sh "1" R 550 550 0 0 2700
Dr 320 0 0
At STD N 00E0FFFF
Ne 1 "GND"
Po -500 0
$EndPAD
$PAD
Sh "2" C 550 550 0 0 2700
Dr 320 0 0
At STD N 00E0FFFF
Ne 48 "N-000056"
Po 500 0
$EndPAD
$EndMODULE SIL-2
$MODULE SIL-3
Po 56250 64500 0 15 00200000 4D580A8A ~~
Li SIL-3
Cd Connecteur 3 pins
Kw CONN DEV
Sc 4D580A8A
AR /4D57F51B
Op 0 0 0
T0 0 -1000 705 424 0 106 N V 21 N"RV1"
T1 0 -1000 600 400 0 100 N I 21 N"POT"
DS -1500 500 -1500 -500 120 21
DS -1500 -500 1500 -500 120 21
DS 1500 -500 1500 500 120 21
DS 1500 500 -1500 500 120 21
DS -500 -500 -500 500 120 21
$PAD
Sh "1" R 550 550 0 0 0
Dr 320 0 0
At STD N 00E0FFFF
Ne 45 "N-000051"
Po -1000 0
$EndPAD
$PAD
Sh "2" C 550 550 0 0 0
Dr 320 0 0
At STD N 00E0FFFF
Ne 1 "GND"
Po 0 0
$EndPAD
$PAD
Sh "3" C 550 550 0 0 0
Dr 320 0 0
At STD N 00E0FFFF
Ne 1 "GND"
Po 1000 0
$EndPAD
$EndMODULE SIL-3
$MODULE SM0805
Po 61750 52750 2700 0 42806E04 4D5805DA ~~
Li SM0805
Sc 4D5805DA
AR /4D2C24F6
Op 0 0 0
At SMD
T0 0 0 250 250 2700 50 M V 20 N"R18"
T1 0 0 250 250 2700 50 M I 20 N"3k"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 2700
Dr 0 0 0
At SMD N 00440001
Ne 36 "N-000042"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 2700
Dr 0 0 0
At SMD N 00440001
Ne 27 "N-000028"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 61250 54250 1800 0 42806E04 4D5805DC ~~
Li SM0805
Sc 4D5805DC
AR /4D2C24F1
Op 0 0 0
At SMD
T0 0 0 250 250 1800 50 M V 20 N"R17"
T1 0 0 250 250 1800 50 M I 20 N"200k"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 1800
Dr 0 0 0
At SMD N 00440001
Ne 27 "N-000028"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 1800
Dr 0 0 0
At SMD N 00440001
Ne 1 "GND"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 55000 65750 900 0 42806E04 4D5805DE ~~
Li SM0805
Sc 4D5805DE
AR /4D57F50D
Op 0 0 0
At SMD
T0 0 0 250 250 900 50 M V 20 N"R16"
T1 0 0 250 250 900 50 M I 20 N"R"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 900
Dr 0 0 0
At SMD N 00440001
Ne 42 "N-000048"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 900
Dr 0 0 0
At SMD N 00440001
Ne 45 "N-000051"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 54500 53500 2700 0 42806E04 4D5805E0 ~~
Li SM0805
Sc 4D5805E0
AR /4D2C1DA3
Op 0 0 0
At SMD
T0 0 0 250 250 2700 50 M V 20 N"R15"
T1 0 0 250 250 2700 50 M I 20 N"10k"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 2700
Dr 0 0 0
At SMD N 00440001
Ne 3 "N-000002"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 2700
Dr 0 0 0
At SMD N 00440001
Ne 50 "N-000058"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 55500 51750 0 0 42806E04 4D5805E2 ~~
Li SM0805
Sc 4D5805E2
AR /4D2C1D9D
Op 0 0 0
At SMD
T0 0 0 250 250 0 50 M V 20 N"R14"
T1 0 0 250 250 0 50 M I 20 N"10k"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 3 "N-000002"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 47 "N-000054"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 53250 46000 0 0 42806E04 4D5805E4 ~~
Li SM0805
Sc 4D5805E4
AR /4D2C269D
Op 0 0 0
At SMD
T0 0 0 250 250 0 50 M V 20 N"R11"
T1 0 0 250 250 0 50 M I 20 N"200"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 24 "N-000025"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 40 "N-000046"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 53250 47000 0 0 42806E04 4D5805E6 ~~
Li SM0805
Sc 4D5805E6
AR /4D2C2668
Op 0 0 0
At SMD
T0 0 0 250 250 0 50 M V 20 N"R12"
T1 0 0 250 250 0 50 M I 20 N"200"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 14 "N-000015"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 37 "N-000043"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 58750 47250 2700 0 42806E04 4D5805E8 ~~
Li SM0805
Sc 4D5805E8
AR /4D2C26EE
Op 0 0 0
At SMD
T0 0 0 250 250 2700 50 M V 20 N"R6"
T1 0 0 250 250 2700 50 M I 20 N"3k"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 2700
Dr 0 0 0
At SMD N 00440001
Ne 40 "N-000046"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 2700
Dr 0 0 0
At SMD N 00440001
Ne 39 "N-000045"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 54500 48500 900 0 42806E04 4D5805EA ~~
Li SM0805
Sc 4D5805EA
AR /4D2C25F0
Op 0 0 0
At SMD
T0 0 0 250 250 900 50 M V 20 N"R5"
T1 0 0 250 250 900 50 M I 20 N"3k"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 900
Dr 0 0 0
At SMD N 00440001
Ne 38 "N-000044"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 900
Dr 0 0 0
At SMD N 00440001
Ne 37 "N-000043"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 46500 59000 1800 0 42806E04 4D5805EC ~~
Li SM0805
Sc 4D5805EC
AR /4D57C0EA
Op 0 0 0
At SMD
T0 0 0 250 250 1800 50 M V 20 N"R10"
T1 0 0 250 250 1800 50 M I 20 N"200"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 1800
Dr 0 0 0
At SMD N 00440001
Ne 11 "N-000012"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 1800
Dr 0 0 0
At SMD N 00440001
Ne 12 "N-000013"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 46500 58000 1800 0 42806E04 4D5EC305 ~~
Li SM0805
Sc 4D5EC305
AR /4D57C0ED
Op 0 0 0
At SMD
T0 0 0 250 250 1800 50 M V 20 N"R9"
T1 0 0 250 250 1800 50 M I 20 N"200"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 1800
Dr 0 0 0
At SMD N 00440001
Ne 2 "N-000001"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 1800
Dr 0 0 0
At SMD N 00440001
Ne 13 "N-000014"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 55000 59250 0 0 42806E04 4D5EC308 ~~
Li SM0805
Sc 4D5EC308
AR /4D57C0DF
Op 0 0 0
At SMD
T0 0 0 250 250 0 50 M V 20 N"R8"
T1 0 0 250 250 0 50 M I 20 N"200"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 10 "N-000011"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 9 "N-000010"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 49500 57250 1800 0 42806E04 4D5805F2 ~~
Li SM0805
Sc 4D5805F2
AR /4D2C2B60
Op 0 0 0
At SMD
T0 0 0 250 250 1800 50 M V 20 N"R7"
T1 0 0 250 250 1800 50 M I 20 N"200"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 1800
Dr 0 0 0
At SMD N 00440001
Ne 43 "N-000049"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 1800
Dr 0 0 0
At SMD N 00440001
Ne 41 "N-000047"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 44000 65500 2700 0 42806E04 4D5EC30B ~~
Li SM0805
Sc 4D5EC30B
AR /4D57C42D
Op 0 0 0
At SMD
T0 0 0 250 250 2700 50 M V 20 N"R13"
T1 0 0 250 250 2700 50 M I 20 N"200"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 2700
Dr 0 0 0
At SMD N 00440001
Ne 49 "N-000057"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 2700
Dr 0 0 0
At SMD N 00440001
Ne 48 "N-000056"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 52250 50750 0 0 42806E04 4D5805F6 ~~
Li SM0805
Sc 4D5805F6
AR /4D57C429
Op 0 0 0
At SMD
T0 0 0 250 250 0 50 M V 20 N"R3"
T1 0 0 250 250 0 50 M I 20 N"200"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 6 "N-000005"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 22 "N-000023"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 52250 49750 0 0 42806E04 4D5805F8 ~~
Li SM0805
Sc 4D5805F8
AR /4D57C427
Op 0 0 0
At SMD
T0 0 0 250 250 0 50 M V 20 N"R2"
T1 0 0 250 250 0 50 M I 20 N"200"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 5 "N-000004"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 21 "N-000022"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 52250 48750 0 0 42806E04 4D5805FA ~~
Li SM0805
Sc 4D5805FA
AR /4D57C421
Op 0 0 0
At SMD
T0 0 0 250 250 0 50 M V 20 N"R1"
T1 0 0 250 250 0 50 M I 20 N"200"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 4 "N-000003"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 20 "N-000021"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 46250 56750 1800 0 42806E04 4D5805FC ~~
Li SM0805
Sc 4D5805FC
AR /4D3A051F
Op 0 0 0
At SMD
T0 0 0 250 250 1800 50 M V 20 N"R4"
T1 0 0 250 250 1800 50 M I 20 N"3k"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 1800
Dr 0 0 0
At SMD N 00440001
Ne 35 "N-000037"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 1800
Dr 0 0 0
At SMD N 00440001
Ne 34 "N-000036"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 45250 44750 900 0 42806E04 4D5805FE ~~
Li SM0805
Sc 4D5805FE
AR /4D2C327C
Op 0 0 0
At SMD
T0 0 0 250 250 900 50 M V 20 N"C19"
T1 0 0 250 250 900 50 M I 20 N"1u"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 900
Dr 0 0 0
At SMD N 00440001
Ne 33 "N-000034"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 900
Dr 0 0 0
At SMD N 00440001
Ne 1 "GND"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 42250 50250 1800 0 42806E04 4D580600 ~~
Li SM0805
Sc 4D580600
AR /4D2C327E
Op 0 0 0
At SMD
T0 0 0 250 250 1800 50 M V 20 N"C18"
T1 0 0 250 250 1800 50 M I 20 N"1u"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 1800
Dr 0 0 0
At SMD N 00440001
Ne 3 "N-000002"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 1800
Dr 0 0 0
At SMD N 00440001
Ne 1 "GND"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 57750 57750 1800 0 42806E04 4D580602 ~~
Li SM0805
Sc 4D580602
AR /4D45560E
Op 0 0 0
At SMD
T0 0 0 250 250 1800 50 M V 20 N"C17"
T1 0 0 250 250 1800 50 M I 20 N"1u"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 1800
Dr 0 0 0
At SMD N 00440001
Ne 46 "N-000053"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 1800
Dr 0 0 0
At SMD N 00440001
Ne 1 "GND"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 42450 47650 0 0 42806E04 4D580604 ~~
Li SM0805
Sc 4D580604
AR /4D2C3279
Op 0 0 0
At SMD
T0 0 0 250 250 0 50 M V 20 N"C15"
T1 0 0 250 250 0 50 M I 20 N"1u"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 42 "N-000048"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 1 "GND"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 41500 53650 0 0 42806E04 4D580606 ~~
Li SM0805
Sc 4D580606
AR /4D455A46
Op 0 0 0
At SMD
T0 0 0 250 250 0 50 M V 20 N"C12"
T1 0 0 250 250 0 50 M I 20 N"1u"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 42 "N-000048"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 1 "GND"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 61250 57250 1800 0 42806E04 4D58060A ~~
Li SM0805
Sc 4D58060A
AR /4D2C24AA
Op 0 0 0
At SMD
T0 0 0 250 250 1800 50 M V 20 N"C10"
T1 0 0 250 250 1800 50 M I 20 N"1u"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 1800
Dr 0 0 0
At SMD N 00440001
Ne 27 "N-000028"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 1800
Dr 0 0 0
At SMD N 00440001
Ne 26 "N-000027"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 61250 55250 1800 0 42806E04 4D58060C ~~
Li SM0805
Sc 4D58060C
AR /4D2C246D
Op 0 0 0
At SMD
T0 0 0 250 250 1800 50 M V 20 N"C9"
T1 0 0 250 250 1800 50 M I 20 N"1u"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 1800
Dr 0 0 0
At SMD N 00440001
Ne 27 "N-000028"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 1800
Dr 0 0 0
At SMD N 00440001
Ne 31 "N-000032"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 50250 52250 900 0 42806E04 4D58060E ~~
Li SM0805
Sc 4D58060E
AR /4D2360D9
Op 0 0 0
At SMD
T0 0 0 250 250 900 50 M V 20 N"C8"
T1 0 0 250 250 900 50 M I 20 N"1u"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 900
Dr 0 0 0
At SMD N 00440001
Ne 25 "N-000026"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 900
Dr 0 0 0
At SMD N 00440001
Ne 1 "GND"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 49250 65500 900 0 42806E04 4D580610 ~~
Li SM0805
Sc 4D580610
AR /4D6018C1
Op 0 0 0
At SMD
T0 0 0 250 250 900 50 M V 20 N"C6"
T1 0 0 250 250 900 50 M I 20 N"2u"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 900
Dr 0 0 0
At SMD N 00440001
Ne 48 "N-000056"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 900
Dr 0 0 0
At SMD N 00440001
Ne 1 "GND"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 49000 55500 0 0 42806E04 4D580612 ~~
Li SM0805
Sc 4D580612
AR /4D235D26
Op 0 0 0
At SMD
T0 0 0 250 250 0 50 M V 20 N"C2"
T1 0 0 250 250 0 50 M I 20 N"22p"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 30 "N-000031"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 1 "GND"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 49000 54500 0 0 42806E04 4D580614 ~~
Li SM0805
Sc 4D580614
AR /4D235D20
Op 0 0 0
At SMD
T0 0 0 250 250 0 50 M V 20 N"C1"
T1 0 0 250 250 0 50 M I 20 N"22p"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 15 "N-000016"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 1 "GND"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SOT23-6_Opendous
Po 51500 65000 0 0 4BC59211 4D580A93 ~~
Li SOT23-6_Opendous
Kw SOT23-5_Opendous
Sc 4D580A93
AR /4D57F3E3
Op 0 0 0
At SMD
T0 0 0 240 240 0 60 M V 20 N"U3"
T1 -600 0 50 50 2700 1 M I 20 N"MCP1640"
DS -591 354 -512 354 60 20
DS -591 354 -591 -354 60 20
DS -591 -354 -512 -354 60 20
DS 591 -354 512 -354 60 20
DS 591 354 512 354 60 20
DS 591 -354 591 354 60 20
$PAD
Sh "6" R 240 350 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 48 "N-000056"
Po -375 500
$EndPAD
$PAD
Sh "4" R 240 350 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 45 "N-000051"
Po 375 500
$EndPAD
$PAD
Sh "3" R 240 350 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 48 "N-000056"
Po 375 -500
$EndPAD
$PAD
Sh "2" R 240 350 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 1 "GND"
Po 0 -500
$EndPAD
$PAD
Sh "1" R 240 350 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 19 "N-000020"
Po -375 -500
$EndPAD
$PAD
Sh "5" R 240 350 0 0 0
Dr 0 0 0
At SMD N 00400001
Ne 42 "N-000048"
Po 0 500
$EndPAD
$SHAPE3D
Na "techno/SOT23_6.wrl"
Sc 0.393700 0.393700 0.393700
Of 0.000000 0.000000 0.001000
Ro -90.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SOT23-6_Opendous
$MODULE SW_PUSH_SMALL
Po 60750 46000 900 0 4D603E3E 4D603E67 ~~
Li SW_PUSH_SMALL
Sc 4D603E67
AR /4D57C019
Op 0 0 0
T0 0 300 400 400 900 80 M V 20 N"SW6"
T1 0 -400 400 400 900 80 M V 20 N"SW_PUSH"
DC 0 0 0 1000 50 20
DS -1500 1500 1500 1500 50 20
DS 1500 1500 1500 -1500 50 20
DS 1500 -1500 -1500 -1500 50 20
DS -1500 1500 -1500 -1500 50 20
$PAD
Sh "1" C 650 650 0 0 900
Dr 320 0 0
At STD N 00D0FFFF
Ne 1 "GND"
Po 1500 1000
$EndPAD
$PAD
Sh "2" C 650 650 0 0 900
Dr 320 0 0
At STD N 00D0FFFF
Ne 40 "N-000046"
Po 1500 -1000
$EndPAD
$PAD
Sh "1" C 650 650 0 0 900
Dr 320 0 0
At STD N 00D0FFFF
Ne 1 "GND"
Po -1500 1000
$EndPAD
$PAD
Sh "2" C 650 650 0 0 900
Dr 320 0 0
At STD N 00D0FFFF
Ne 40 "N-000046"
Po -1500 -1000
$EndPAD
$EndMODULE SW_PUSH_SMALL
$MODULE SW_PUSH_SMALL
Po 56000 46000 900 0 4D603E35 4D603E64 ~~
Li SW_PUSH_SMALL
Sc 4D603E64
AR /4D57C010
Op 0 0 0
T0 0 300 400 400 900 80 M V 20 N"SW5"
T1 0 -400 400 400 900 80 M V 20 N"SW_PUSH"
DC 0 0 0 1000 50 20
DS -1500 1500 1500 1500 50 20
DS 1500 1500 1500 -1500 50 20
DS 1500 -1500 -1500 -1500 50 20
DS -1500 1500 -1500 -1500 50 20
$PAD
Sh "1" C 650 650 0 0 900
Dr 320 0 0
At STD N 00D0FFFF
Ne 1 "GND"
Po 1500 1000
$EndPAD
$PAD
Sh "2" C 650 650 0 0 900
Dr 320 0 0
At STD N 00D0FFFF
Ne 37 "N-000043"
Po 1500 -1000
$EndPAD
$PAD
Sh "1" C 650 650 0 0 900
Dr 320 0 0
At STD N 00D0FFFF
Ne 1 "GND"
Po -1500 1000
$EndPAD
$PAD
Sh "2" C 650 650 0 0 900
Dr 320 0 0
At STD N 00D0FFFF
Ne 37 "N-000043"
Po -1500 -1000
$EndPAD
$EndMODULE SW_PUSH_SMALL
$MODULE SW_PUSH_SMALL
Po 47250 61500 0 0 46544DB3 4D603E61 ~~
Li SW_PUSH_SMALL
Sc 4D603E61
AR /4D57C0EB
Op 0 0 0
T0 0 300 400 400 0 80 M V 20 N"SW4"
T1 0 -400 400 400 0 80 M V 20 N"SW_PUSH"
DC 0 0 0 1000 50 20
DS -1500 1500 1500 1500 50 20
DS 1500 1500 1500 -1500 50 20
DS 1500 -1500 -1500 -1500 50 20
DS -1500 1500 -1500 -1500 50 20
$PAD
Sh "1" C 650 650 0 0 0
Dr 320 0 0
At STD N 00D0FFFF
Ne 1 "GND"
Po 1500 1000
$EndPAD
$PAD
Sh "2" C 650 650 0 0 0
Dr 320 0 0
At STD N 00D0FFFF
Ne 12 "N-000013"
Po 1500 -1000
$EndPAD
$PAD
Sh "1" C 650 650 0 0 0
Dr 320 0 0
At STD N 00D0FFFF
Ne 1 "GND"
Po -1500 1000
$EndPAD
$PAD
Sh "2" C 650 650 0 0 0
Dr 320 0 0
At STD N 00D0FFFF
Ne 12 "N-000013"
Po -1500 -1000
$EndPAD
$EndMODULE SW_PUSH_SMALL
$MODULE SW_PUSH_SMALL
Po 41500 61500 0 0 46544DB3 4D603E5E ~~
Li SW_PUSH_SMALL
Sc 4D603E5E
AR /4D57C0EC
Op 0 0 0
T0 0 300 400 400 0 80 M V 20 N"SW3"
T1 0 -400 400 400 0 80 M V 20 N"SW_PUSH"
DC 0 0 0 1000 50 20
DS -1500 1500 1500 1500 50 20
DS 1500 1500 1500 -1500 50 20
DS 1500 -1500 -1500 -1500 50 20
DS -1500 1500 -1500 -1500 50 20
$PAD
Sh "1" C 650 650 0 0 0
Dr 320 0 0
At STD N 00D0FFFF
Ne 1 "GND"
Po 1500 1000
$EndPAD
$PAD
Sh "2" C 650 650 0 0 0
Dr 320 0 0
At STD N 00D0FFFF
Ne 13 "N-000014"
Po 1500 -1000
$EndPAD
$PAD
Sh "1" C 650 650 0 0 0
Dr 320 0 0
At STD N 00D0FFFF
Ne 1 "GND"
Po -1500 1000
$EndPAD
$PAD
Sh "2" C 650 650 0 0 0
Dr 320 0 0
At STD N 00D0FFFF
Ne 13 "N-000014"
Po -1500 -1000
$EndPAD
$EndMODULE SW_PUSH_SMALL
$MODULE SW_PUSH_SMALL
Po 60500 61500 0 0 46544DB3 4D603E5B ~~
Li SW_PUSH_SMALL
Sc 4D603E5B
AR /4D57C0DE
Op 0 0 0
T0 0 300 400 400 0 80 M V 20 N"SW2"
T1 0 -400 400 400 0 80 M V 20 N"SW_PUSH"
DC 0 0 0 1000 50 20
DS -1500 1500 1500 1500 50 20
DS 1500 1500 1500 -1500 50 20
DS 1500 -1500 -1500 -1500 50 20
DS -1500 1500 -1500 -1500 50 20
$PAD
Sh "1" C 650 650 0 0 0
Dr 320 0 0
At STD N 00D0FFFF
Ne 1 "GND"
Po 1500 1000
$EndPAD
$PAD
Sh "2" C 650 650 0 0 0
Dr 320 0 0
At STD N 00D0FFFF
Ne 9 "N-000010"
Po 1500 -1000
$EndPAD
$PAD
Sh "1" C 650 650 0 0 0
Dr 320 0 0
At STD N 00D0FFFF
Ne 1 "GND"
Po -1500 1000
$EndPAD
$PAD
Sh "2" C 650 650 0 0 0
Dr 320 0 0
At STD N 00D0FFFF
Ne 9 "N-000010"
Po -1500 -1000
$EndPAD
$EndMODULE SW_PUSH_SMALL
$MODULE SW_PUSH_SMALL
Po 54000 61500 0 0 46544DB3 4D603E58 ~~
Li SW_PUSH_SMALL
Sc 4D603E58
AR /4D57C0B2
Op 0 0 0
T0 0 300 400 400 0 80 M V 20 N"SW1"
T1 0 -400 400 400 0 80 M V 20 N"SW_PUSH"
DC 0 0 0 1000 50 20
DS -1500 1500 1500 1500 50 20
DS 1500 1500 1500 -1500 50 20
DS 1500 -1500 -1500 -1500 50 20
DS -1500 1500 -1500 -1500 50 20
$PAD
Sh "1" C 650 650 0 0 0
Dr 320 0 0
At STD N 00D0FFFF
Ne 1 "GND"
Po 1500 1000
$EndPAD
$PAD
Sh "2" C 650 650 0 0 0
Dr 320 0 0
At STD N 00D0FFFF
Ne 41 "N-000047"
Po 1500 -1000
$EndPAD
$PAD
Sh "1" C 650 650 0 0 0
Dr 320 0 0
At STD N 00D0FFFF
Ne 1 "GND"
Po -1500 1000
$EndPAD
$PAD
Sh "2" C 650 650 0 0 0
Dr 320 0 0
At STD N 00D0FFFF
Ne 41 "N-000047"
Po -1500 -1000
$EndPAD
$EndMODULE SW_PUSH_SMALL
$MODULE SIL-5
Po 53500 49750 900 15 00200000 4D5805D9 ~~
Li SIL-5
Cd Connecteur 5 pins
Kw CONN DEV
Sc 4D5805D9
AR /4D580876
Op 0 0 0
T0 -250 -1000 681 428 900 107 N V 21 N"P1"
T1 0 -1000 600 400 900 100 N I 21 N"CONN_5"
DS -3000 500 -3000 -500 120 21
DS -3000 -500 2000 -500 120 21
DS 2000 -500 2000 500 120 21
DS 2000 500 -3000 500 120 21
DS -2000 500 -2000 -500 120 21
$PAD
Sh "1" R 550 550 0 0 900
Dr 320 0 0
At STD N 00E0FFFF
Ne 3 "N-000002"
Po -2500 0
$EndPAD
$PAD
Sh "2" C 550 550 0 0 900
Dr 320 0 0
At STD N 00E0FFFF
Ne 1 "GND"
Po -1500 0
$EndPAD
$PAD
Sh "3" C 550 550 0 0 900
Dr 320 0 0
At STD N 00E0FFFF
Ne 22 "N-000023"
Po -500 0
$EndPAD
$PAD
Sh "4" C 550 550 0 0 900
Dr 320 0 0
At STD N 00E0FFFF
Ne 21 "N-000022"
Po 500 0
$EndPAD
$PAD
Sh "5" C 550 550 0 0 900
Dr 320 0 0
At STD N 00E0FFFF
Ne 20 "N-000021"
Po 1500 0
$EndPAD
$EndMODULE SIL-5
$MODULE SM0805
Po 47250 52750 2700 0 42806E04 4D5F022C ~~
Li SM0805
Sc 4D5F022C
AR /4D5F01C0
Op 0 0 0
At SMD
T0 0 0 250 250 2700 50 M V 20 N"C4"
T1 0 0 250 250 2700 50 M I 20 N"1u"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 2700
Dr 0 0 0
At SMD N 00440001
Ne 3 "N-000002"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 2700
Dr 0 0 0
At SMD N 00440001
Ne 1 "GND"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 52250 52500 1800 0 42806E04 4D5F022E ~~
Li SM0805
Sc 4D5F022E
AR /4D5F01BB
Op 0 0 0
At SMD
T0 0 0 250 250 1800 50 M V 20 N"C3"
T1 0 0 250 250 1800 50 M I 20 N"1u"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 1800
Dr 0 0 0
At SMD N 00440001
Ne 3 "N-000002"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 1800
Dr 0 0 0
At SMD N 00440001
Ne 1 "GND"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 57050 58650 0 0 42806E04 4D5F037F ~~
Li SM0805
Sc 4D5F037F
AR /4D5F0324
Op 0 0 0
At SMD
T0 0 0 250 250 0 50 M V 20 N"C13"
T1 0 0 250 250 0 50 M I 20 N"1u"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 42 "N-000048"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 1 "GND"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 44500 63750 0 0 42806E04 4D601801 ~~
Li SM0805
Sc 4D601801
AR /4D60168D
Op 0 0 0
At SMD
T0 0 0 250 250 0 50 M V 20 N"C7"
T1 0 0 250 250 0 50 M I 20 N"1u"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 49 "N-000057"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 0
Dr 0 0 0
At SMD N 00440001
Ne 1 "GND"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 53750 65000 900 0 42806E04 4D601803 ~~
Li SM0805
Sc 4D601803
AR /4D6015F9
Op 0 0 0
At SMD
T0 0 0 250 250 900 50 M V 20 N"C14"
T1 0 0 250 250 900 50 M I 20 N"2u"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 900
Dr 0 0 0
At SMD N 00440001
Ne 0 ""
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 900
Dr 0 0 0
At SMD N 00440001
Ne 1 "GND"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 52750 65000 900 0 42806E04 4D580608 ~~
Li SM0805
Sc 4D580608
AR /4D6018E0
Op 0 0 0
At SMD
T0 0 0 250 250 900 50 M V 20 N"C11"
T1 0 0 250 250 900 50 M I 20 N"200n"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 900
Dr 0 0 0
At SMD N 00440001
Ne 42 "N-000048"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 900
Dr 0 0 0
At SMD N 00440001
Ne 1 "GND"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE SM0805
Po 50250 65500 900 0 42806E04 4D60154B ~~
Li SM0805
Sc 4D60154B
AR /4D600DCB
Op 0 0 0
At SMD
T0 0 0 250 250 900 50 M V 20 N"C5"
T1 0 0 250 250 900 50 M I 20 N"2u"
DC -650 -300 -650 -250 50 20
DS -200 -300 -600 -300 50 20
DS -600 -300 -600 300 50 20
DS -600 300 -200 300 50 20
DS 200 300 600 300 50 20
DS 600 300 600 -300 50 20
DS 600 -300 200 -300 50 20
$PAD
Sh "1" R 350 550 0 0 900
Dr 0 0 0
At SMD N 00440001
Ne 48 "N-000056"
Po -375 0
$EndPAD
$PAD
Sh "2" R 350 550 0 0 900
Dr 0 0 0
At SMD N 00440001
Ne 1 "GND"
Po 375 0
$EndPAD
$SHAPE3D
Na "smd/chip_cms.wrl"
Sc 0.100000 0.100000 0.100000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE SM0805
$MODULE TO92-123
Po 57500 59400 1350 15 4C5F51CE 4D5EF4EC ~~
Li TO92-123
Cd Transistor TO92 brochage type BC237
Kw TR TO92
Sc 4D5EF4EC
AR /4D4555FE
Op 0 0 0
T0 -500 1500 400 400 1350 80 N V 21 N"U5"
T1 -500 -2000 400 400 1350 80 N V 21 N"LP2950_5V0"
DS -500 1000 1000 -500 120 21
DS 1000 -500 1000 -1000 120 21
DS 1000 -1000 500 -1500 120 21
DS 500 -1500 -500 -1500 120 21
DS -500 -1500 -1500 -500 120 21
DS -1500 -500 -1500 500 120 21
DS -1500 500 -1000 1000 120 21
DS -1000 1000 -500 1000 120 21
$PAD
Sh "3" R 550 550 0 0 1350
Dr 320 0 0
At STD N 00E0FFFF
Ne 42 "N-000048"
Po 500 -500
$EndPAD
$PAD
Sh "2" C 550 550 0 0 1350
Dr 320 0 0
At STD N 00E0FFFF
Ne 1 "GND"
Po -500 -500
$EndPAD
$PAD
Sh "1" C 550 550 0 0 1350
Dr 320 0 0
At STD N 00E0FFFF
Ne 46 "N-000053"
Po -500 500
$EndPAD
$SHAPE3D
Na "discret/to98.wrl"
Sc 1.000000 1.000000 1.000000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE TO92-123
$MODULE TO92-123
Po 41750 52000 1350 15 4C5F51CE 4D580623 ~~
Li TO92-123
Cd Transistor TO92 brochage type BC237
Kw TR TO92
Sc 4D580623
AR /4D2C3224
Op 0 0 0
T0 -500 1500 400 400 1350 80 N V 21 N"U6"
T1 -500 -2000 400 400 1350 80 N V 21 N"LP2950_5V0"
DS -500 1000 1000 -500 120 21
DS 1000 -500 1000 -1000 120 21
DS 1000 -1000 500 -1500 120 21
DS 500 -1500 -500 -1500 120 21
DS -500 -1500 -1500 -500 120 21
DS -1500 -500 -1500 500 120 21
DS -1500 500 -1000 1000 120 21
DS -1000 1000 -500 1000 120 21
$PAD
Sh "3" R 550 550 0 0 1350
Dr 320 0 0
At STD N 00E0FFFF
Ne 42 "N-000048"
Po 500 -500
$EndPAD
$PAD
Sh "2" C 550 550 0 0 1350
Dr 320 0 0
At STD N 00E0FFFF
Ne 1 "GND"
Po -500 -500
$EndPAD
$PAD
Sh "1" C 550 550 0 0 1350
Dr 320 0 0
At STD N 00E0FFFF
Ne 3 "N-000002"
Po -500 500
$EndPAD
$SHAPE3D
Na "discret/to98.wrl"
Sc 1.000000 1.000000 1.000000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE TO92-123
$MODULE TO92-123
Po 43250 45750 1350 15 4C5F51CE 4D580621 ~~
Li TO92-123
Cd Transistor TO92 brochage type BC237
Kw TR TO92
Sc 4D580621
AR /4D2C3241
Op 0 0 0
T0 -500 1500 400 400 1350 80 N V 21 N"U7"
T1 -500 -2000 400 400 1350 80 N V 21 N"LP2950_3V3"
DS -500 1000 1000 -500 120 21
DS 1000 -500 1000 -1000 120 21
DS 1000 -1000 500 -1500 120 21
DS 500 -1500 -500 -1500 120 21
DS -500 -1500 -1500 -500 120 21
DS -1500 -500 -1500 500 120 21
DS -1500 500 -1000 1000 120 21
DS -1000 1000 -500 1000 120 21
$PAD
Sh "3" R 550 550 0 0 1350
Dr 320 0 0
At STD N 00E0FFFF
Ne 42 "N-000048"
Po 500 -500
$EndPAD
$PAD
Sh "2" C 550 550 0 0 1350
Dr 320 0 0
At STD N 00E0FFFF
Ne 1 "GND"
Po -500 -500
$EndPAD
$PAD
Sh "1" C 550 550 0 0 1350
Dr 320 0 0
At STD N 00E0FFFF
Ne 33 "N-000034"
Po -500 500
$EndPAD
$SHAPE3D
Na "discret/to98.wrl"
Sc 1.000000 1.000000 1.000000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE TO92-123
$MODULE C2V8
Po 52700 65000 900 15 46544AA3 4D696244 ~~
Li C2V8
Cd Condensateur polarise
Kw CP
Sc 4D696244
AR /4D696155
Op 0 0 0
T0 0 1000 400 400 900 80 N V 21 N"C16"
T1 0 -1000 400 400 900 80 N V 21 N"47µ"
DC 0 0 -1750 0 120 21
$PAD
Sh "1" R 700 700 0 0 900
Dr 400 0 0
At STD N 00E0FFFF
Ne 42 "N-000048"
Po -1000 0
$EndPAD
$PAD
Sh "2" C 700 700 0 0 900
Dr 400 0 0
At STD N 00E0FFFF
Ne 1 "GND"
Po 1000 0
$EndPAD
$SHAPE3D
Na "discret/c_vert_c2v10.wrl"
Sc 1.000000 1.000000 1.000000
Of 0.000000 0.000000 0.000000
Ro 0.000000 0.000000 0.000000
$EndSHAPE3D
$EndMODULE C2V8
$DRAWSEGMENT
Po 0 43307 43000 58661 43000 150
De 28 0 900 0 0
$EndDRAWSEGMENT
$DRAWSEGMENT
Po 3 57677 49213 57087 49213 124
De 28 0 900 0 0
$EndDRAWSEGMENT
$DRAWSEGMENT
Po 3 44291 49213 43701 49213 124
De 28 0 900 0 0
$EndDRAWSEGMENT
$DRAWSEGMENT
Po 3 57677 62205 57087 62205 124
De 28 0 900 0 0
$EndDRAWSEGMENT
$DRAWSEGMENT
Po 3 44291 62205 44882 62205 124
De 28 0 900 0 0
$EndDRAWSEGMENT
$DRAWSEGMENT
Po 0 58661 39370 58661 43700 124
De 28 0 900 0 0
$EndDRAWSEGMENT
$DRAWSEGMENT
Po 0 58661 43700 62598 43700 124
De 28 0 900 0 0
$EndDRAWSEGMENT
$DRAWSEGMENT
Po 0 43307 39370 43307 43700 124
De 28 0 900 0 0
$EndDRAWSEGMENT
$DRAWSEGMENT
Po 0 39370 43700 43307 43700 124
De 28 0 900 0 0
$EndDRAWSEGMENT
$DRAWSEGMENT
Po 0 59055 63386 62598 63386 124
De 28 0 900 0 0
$EndDRAWSEGMENT
$DRAWSEGMENT
Po 0 59055 63386 59055 66929 124
De 28 0 900 0 0
$EndDRAWSEGMENT
$DRAWSEGMENT
Po 0 42913 63386 42913 66929 124
De 28 0 900 0 0
$EndDRAWSEGMENT
$DRAWSEGMENT
Po 0 39370 63386 42913 63386 124
De 28 0 900 0 0
$EndDRAWSEGMENT
$DRAWSEGMENT
Po 0 39370 39370 62598 39370 150
De 28 0 900 0 0
$EndDRAWSEGMENT
$DRAWSEGMENT
Po 0 62598 66929 62598 39370 150
De 28 0 900 0 0
$EndDRAWSEGMENT
$DRAWSEGMENT
Po 0 39370 66929 62598 66929 150
De 28 0 900 0 0
$EndDRAWSEGMENT
$DRAWSEGMENT
Po 0 39370 39370 39370 66929 150
De 28 0 900 0 0
$EndDRAWSEGMENT
$TRACK
Po 0 52700 64000 52700 64575 300 -1
De 0 0 1 0 800
Po 0 52700 64575 52750 64625 300 -1
De 0 0 1 0 400
Po 0 53250 63750 52100 63750 300 -1
De 0 0 1 0 0
Po 0 52696 63713 52500 63700 300 -1
De 0 0 1 0 0
Po 0 52696 63713 52700 64575 300 -1
De 0 0 1 0 0
Po 0 52700 64575 52750 64625 300 -1
De 0 0 1 0 400
Po 0 56250 63750 57250 63750 300 -1
De 0 0 1 0 0
Po 0 57250 63750 57300 63750 300 -1
De 0 0 1 0 0
Po 0 57300 63750 57250 63750 300 -1
De 0 0 1 0 0
Po 0 55500 63750 56250 63750 300 -1
De 0 0 1 0 0
Po 0 56250 63750 56300 63750 300 -1
De 0 0 1 0 0
Po 0 56300 63750 56250 63750 300 -1
De 0 0 1 0 0
Po 0 56250 64500 56250 63750 300 -1
De 0 0 1 0 800
Po 0 56250 63750 56250 63000 300 -1
De 0 0 1 0 0
Po 0 56250 63000 56250 63050 300 -1
De 0 0 1 0 0
Po 0 56250 63050 56250 63000 300 -1
De 0 0 1 0 0
Po 0 43250 45450 43250 45043 300 -1
De 0 0 1 0 0
Po 0 57375 57750 57375 58600 120 -1
De 0 0 1 0 800
Po 0 57375 58600 57425 58650 120 -1
De 0 0 1 0 400
Po 0 57500 60107 57500 58750 120 -1
De 0 0 1 0 800
Po 0 57500 58750 57450 58800 120 -1
De 0 0 1 0 0
Po 0 57450 58800 57500 58800 120 -1
De 0 0 1 0 0
Po 0 42000 54100 42000 53775 300 -1
De 0 0 1 0 0
Po 0 42000 53775 41875 53650 300 -1
De 0 0 1 0 400
Po 0 41875 53650 41875 53500 120 -1
De 0 0 1 0 800
Po 0 41875 53500 41750 53375 120 -1
De 0 0 1 0 0
Po 0 41750 53375 41750 52707 120 -1
De 0 0 1 0 400
Po 0 43250 47650 43200 47650 300 -1
De 0 0 1 0 0
Po 0 43200 47650 43250 47650 300 -1
De 0 0 1 0 0
Po 0 43250 46457 43250 47650 300 -1
De 0 0 1 0 800
Po 0 43250 47650 42825 47650 300 -1
De 0 0 1 0 400
Po 0 42825 47650 43250 47650 300 -1
De 0 0 1 0 800
Po 0 43250 46457 43250 46250 300 -1
De 0 0 1 0 800
Po 0 43100 54700 44400 54700 300 -1
De 0 0 1 0 0
Po 0 44350 54750 44400 54750 300 -1
De 0 0 1 0 0
Po 0 44400 54700 44350 54750 300 -1
De 0 0 1 0 0
Po 0 42850 55300 44400 55300 300 -1
De 0 0 1 0 0
Po 0 44400 55300 44350 55300 300 -1
De 0 0 1 0 0
Po 0 44350 55300 44400 55300 300 -1
De 0 0 1 0 0
Po 0 43000 55900 44400 55900 300 -1
De 0 0 1 0 0
Po 0 44400 55900 44350 55900 300 -1
De 0 0 1 0 0
Po 0 44350 55900 44400 55900 300 -1
De 0 0 1 0 0
Po 0 43100 56550 44400 56550 300 -1
De 0 0 1 0 0
Po 0 43050 57100 44400 57100 300 -1
De 0 0 1 0 0
Po 0 44400 57100 44300 57100 300 -1
De 0 0 1 0 0
Po 0 44300 57100 44400 57100 300 -1
De 0 0 1 0 0
Po 0 43050 57600 44400 57600 300 -1
De 0 0 1 0 0
Po 0 44400 57600 44400 57550 300 -1
De 0 0 1 0 0
Po 0 43100 58200 44400 58200 300 -1
De 0 0 1 0 0
Po 0 43100 58650 44400 58650 300 -1
De 0 0 1 0 0
Po 0 44400 58650 44350 58650 300 -1
De 0 0 1 0 0
Po 0 44350 58650 44400 58650 300 -1
De 0 0 1 0 0
Po 0 43100 54100 44250 54100 300 -1
De 0 0 1 0 0
Po 0 44400 54250 44400 54750 300 -1
De 0 0 1 0 0
Po 0 44250 54100 44400 54250 300 -1
De 0 0 1 0 0
Po 0 44400 54750 44400 55300 300 -1
De 0 0 1 0 0
Po 0 44400 55300 44400 55900 300 -1
De 0 0 1 0 0
Po 0 44400 55900 44400 56550 300 -1
De 0 0 1 0 0
Po 0 44400 56550 44400 57100 300 -1
De 0 0 1 0 0
Po 0 44400 57100 44400 57550 300 -1
De 0 0 1 0 0
Po 0 44400 57550 44400 58200 300 -1
De 0 0 1 0 0
Po 0 44400 58200 44400 58650 300 -1
De 0 0 1 0 0
Po 0 43800 59400 43100 59400 300 -1
De 0 0 1 0 0
Po 0 44400 58650 44400 58800 300 -1
De 0 0 1 0 0
Po 0 44400 58800 43800 59400 300 -1
De 0 0 1 0 0
Po 0 42500 58650 42500 59400 300 -1
De 0 0 1 0 0
Po 0 42000 58650 42500 58650 300 -1
De 0 0 1 0 0
Po 0 42500 58650 43100 58650 300 -1
De 0 0 1 0 0
Po 0 43100 58650 43000 58650 300 -1
De 0 0 1 0 0
Po 0 43000 58650 43100 58650 300 -1
De 0 0 1 0 0
Po 0 42000 57100 43050 57100 300 -1
De 0 0 1 0 0
Po 0 43050 57100 43100 57150 300 -1
De 0 0 1 0 0
Po 0 42000 58200 43100 58200 300 -1
De 0 0 1 0 0
Po 0 42000 57600 43050 57600 300 -1
De 0 0 1 0 0
Po 0 43050 57600 43100 57550 300 -1
De 0 0 1 0 0
Po 0 42000 56550 43100 56550 300 -1
De 0 0 1 0 0
Po 0 43050 56600 43100 56600 300 -1
De 0 0 1 0 0
Po 0 43100 56550 43050 56600 300 -1
De 0 0 1 0 0
Po 0 43100 55900 43000 55900 300 -1
De 0 0 1 0 0
Po 0 43000 55900 42050 55900 300 -1
De 0 0 1 0 0
Po 0 42050 55900 42000 55950 300 -1
De 0 0 1 0 0
Po 0 42000 55300 42850 55300 300 -1
De 0 0 1 0 0
Po 0 42850 55300 42900 55300 300 -1
De 0 0 1 0 0
Po 0 42900 55300 43100 55500 300 -1
De 0 0 1 0 0
Po 0 43100 54700 42100 54700 300 -1
De 0 0 1 0 0
Po 0 42100 54700 42000 54800 300 -1
De 0 0 1 0 0
Po 0 42000 54100 43100 54100 300 -1
De 0 0 1 0 0
Po 0 43100 54100 43050 54100 300 -1
De 0 0 1 0 0
Po 0 43050 54100 43100 54100 300 -1
De 0 0 1 0 0
Po 0 43100 52750 43100 54100 300 -1
De 0 0 1 0 0
Po 0 43100 54100 43100 54700 300 -1
De 0 0 1 0 0
Po 0 43100 54700 43100 55500 300 -1
De 0 0 1 0 0
Po 0 43100 55500 43100 55900 300 -1
De 0 0 1 0 0
Po 0 43100 55900 43100 56600 300 -1
De 0 0 1 0 0
Po 0 43100 56600 43100 57150 300 -1
De 0 0 1 0 0
Po 0 43100 57150 43100 57550 300 -1
De 0 0 1 0 0
Po 0 43100 57550 43100 58200 300 -1
De 0 0 1 0 0
Po 0 43100 58200 43100 58650 300 -1
De 0 0 1 0 0
Po 0 43100 58650 43100 59400 300 -1
De 0 0 1 0 0
Po 0 43100 59400 42500 59400 300 -1
De 0 0 1 0 0
Po 0 42500 59400 42000 59400 300 -1
De 0 0 1 0 0
Po 0 51500 64500 51500 64750 120 -1
De 0 0 1 0 800
Po 0 50275 65100 50250 65125 120 -1
De 0 0 1 0 400
Po 0 50700 65100 50275 65100 300 -1
De 0 0 1 0 0
Po 0 50950 64850 50700 65100 120 -1
De 0 0 1 0 0
Po 0 51400 64850 50950 64850 120 -1
De 0 0 1 0 0
Po 0 51500 64750 51400 64850 120 -1
De 0 0 1 0 0
Po 0 51500 64500 51500 64000 120 -1
De 0 0 1 0 800
Po 0 51500 64000 51750 63750 300 -1
De 0 0 1 0 0
Po 0 45250 44375 46875 44375 300 -1
De 0 0 1 0 800
Po 0 46875 44375 47000 44250 300 -1
De 0 0 1 0 400
Po 0 43875 44375 45250 44375 300 -1
De 0 0 1 0 400
Po 0 43250 45000 43875 44375 300 -1
De 0 0 1 0 0
Po 0 43250 45043 43250 45000 300 -1
De 0 0 1 0 0
Po 0 48000 61750 48000 63000 300 -1
De 0 0 1 0 0
Po 0 47500 61750 47500 63000 300 -1
De 0 0 1 0 0
Po 0 47000 61750 47000 63000 300 -1
De 0 0 1 0 0
Po 0 46500 61750 46500 63000 300 -1
De 0 0 1 0 0
Po 0 49500 62000 49500 63000 300 -1
De 0 0 1 0 0
Po 0 51750 62000 51750 63750 300 -1
De 0 0 1 0 0
Po 0 50500 62000 50500 63000 300 -1
De 0 0 1 0 0
Po 0 54750 62500 54750 63750 300 -1
De 0 0 1 0 0
Po 0 54250 62500 54250 63750 300 -1
De 0 0 1 0 0
Po 0 53750 62500 53750 63750 300 -1
De 0 0 1 0 0
Po 0 53250 62500 53250 63750 300 -1
De 0 0 1 0 0
Po 0 51250 62000 51250 63250 300 -1
De 0 0 1 0 0
Po 0 50000 62000 50000 63000 300 -1
De 0 0 1 0 0
Po 0 52500 62500 53250 62500 300 -1
De 0 0 1 0 800
Po 0 53250 62500 53750 62500 300 -1
De 0 0 1 0 0
Po 0 53750 62500 54250 62500 300 -1
De 0 0 1 0 0
Po 0 54250 62500 54750 62500 300 -1
De 0 0 1 0 0
Po 0 54750 62500 55500 62500 300 -1
De 0 0 1 0 400
Po 0 45750 61750 46500 61750 300 -1
De 0 0 1 0 0
Po 0 46500 61750 47000 61750 300 -1
De 0 0 1 0 0
Po 0 47000 61750 47500 61750 300 -1
De 0 0 1 0 0
Po 0 47500 61750 48000 61750 300 -1
De 0 0 1 0 0
Po 0 48000 61750 49000 61750 300 -1
De 0 0 1 0 0
Po 0 49000 61750 49250 62000 300 -1
De 0 0 1 0 0
Po 0 60875 54250 60875 52625 300 -1
De 0 0 1 0 800
Po 0 60875 52625 60500 52250 300 -1
De 0 0 1 0 0
Po 0 60500 52250 60500 51250 300 -1
De 0 0 1 0 400
Po 0 57375 52750 57375 52625 300 -1
De 0 0 1 0 0
Po 0 57750 52250 60500 52250 300 -1
De 0 0 1 0 0
Po 0 57375 52625 57750 52250 300 -1
De 0 0 1 0 0
Po 0 57375 57750 57375 52750 300 -1
De 0 0 1 0 800
Po 0 57375 52750 57375 51625 300 -1
De 0 0 1 0 0
Po 0 57375 51625 56500 50750 300 -1
De 0 0 1 0 0
Po 0 56500 50750 55750 50750 300 -1
De 0 0 1 0 0
Po 0 44750 52750 46500 52750 300 -1
De 0 0 1 0 0
Po 0 43750 52750 43100 52750 300 -1
De 0 0 1 0 0
Po 0 59000 62500 62000 62500 300 -1
De 0 0 1 0 C00
Po 0 52500 62500 52500 63750 300 -1
De 0 0 1 0 800
Po 0 55500 62500 55500 63750 300 -1
De 0 0 1 0 800
Po 0 57250 64500 57250 63750 300 -1
De 0 0 1 0 800
Po 0 57250 63750 57250 63500 300 -1
De 0 0 1 0 0
Po 0 56250 64500 57250 64500 300 -1
De 0 0 1 0 C00
Po 0 53250 64625 53250 63750 300 -1
De 0 0 1 0 0
Po 0 55500 63750 54750 63750 300 -1
De 0 0 1 0 0
Po 0 54750 63750 54250 63750 300 -1
De 0 0 1 0 0
Po 0 54250 63750 53750 63750 300 -1
De 0 0 1 0 0
Po 0 53750 63750 53250 63750 300 -1
De 0 0 1 0 0
Po 0 52500 63700 52500 63750 300 -1
De 0 0 1 0 0
Po 0 52500 63750 52100 63750 300 -1
De 0 0 1 0 0
Po 0 52100 63750 51750 63750 300 -1
De 0 0 1 0 0
Po 0 43000 61750 42000 60750 300 -1
De 0 0 1 0 0
Po 0 42000 60750 42000 59400 300 -1
De 0 0 1 0 0
Po 0 42000 59400 42000 58650 300 -1
De 0 0 1 0 0
Po 0 42000 58650 42000 58200 300 -1
De 0 0 1 0 0
Po 0 42000 58200 42000 57600 300 -1
De 0 0 1 0 0
Po 0 42000 57600 42000 57100 300 -1
De 0 0 1 0 0
Po 0 42000 57100 42000 56550 300 -1
De 0 0 1 0 0
Po 0 42000 56550 42000 55950 300 -1
De 0 0 1 0 0
Po 0 42000 55950 42000 55300 300 -1
De 0 0 1 0 0
Po 0 42000 55300 42000 54800 300 -1
De 0 0 1 0 0
Po 0 42000 54800 42000 54100 300 -1
De 0 0 1 0 0
Po 0 45250 63000 46500 63000 300 -1
De 0 0 1 0 0
Po 0 46500 63000 47000 63000 300 -1
De 0 0 1 0 0
Po 0 47000 63000 47500 63000 300 -1
De 0 0 1 0 0
Po 0 47500 63000 48000 63000 300 -1
De 0 0 1 0 0
Po 0 48000 63000 49500 63000 300 -1
De 0 0 1 0 0
Po 0 49500 63000 50000 63000 300 -1
De 0 0 1 0 0
Po 0 50000 63000 50500 63000 300 -1
De 0 0 1 0 0
Po 0 50500 63000 51000 63000 300 -1
De 0 0 1 0 0
Po 0 51000 63000 51250 63250 300 -1
De 0 0 1 0 0
Po 0 51250 63250 51750 63750 300 -1
De 0 0 1 0 0
Po 0 44875 63750 44875 63375 120 -1
De 0 0 1 0 800
Po 0 44875 63375 45250 63000 300 -1
De 0 0 1 0 0
Po 0 45250 63000 45750 62500 300 -1
De 0 0 1 0 400
Po 0 44750 64750 44750 64500 300 -1
De 0 0 1 0 800
Po 0 44750 64500 44875 64375 300 -1
De 0 0 1 0 0
Po 0 44875 64375 44875 63750 300 -1
De 0 0 1 0 400
Po 0 52750 64625 53250 64625 300 -1
De 0 0 1 0 800
Po 0 53250 64625 53750 64625 300 -1
De 0 0 1 0 400
Po 0 50250 65125 49250 65125 300 -1
De 0 0 1 0 C00
Po 0 53500 51250 54000 51250 120 -1
De 0 0 1 0 800
Po 0 57375 51625 57375 52875 120 -1
De 0 0 1 0 0
Po 0 56500 50750 57375 51625 120 -1
De 0 0 1 0 0
Po 0 55750 50750 56500 50750 120 -1
De 0 0 1 0 0
Po 3 55750 50750 55750 50750 600 300
De 15 1 1 0 0
Po 0 54500 50750 55750 50750 120 -1
De 15 0 1 0 0
Po 3 54500 50750 54500 50750 600 300
De 15 1 1 0 0
Po 0 54000 51250 54500 50750 120 -1
De 0 0 1 0 0
Po 0 57375 57750 57375 52875 120 -1
De 0 0 1 0 800
Po 0 58000 52250 60500 52250 120 -1
De 0 0 1 0 0
Po 0 57375 52875 58000 52250 120 -1
De 0 0 1 0 0
Po 0 55500 62500 55750 62500 300 -1
De 0 0 1 0 800
Po 0 55750 62500 56250 63000 300 -1
De 0 0 1 0 0
Po 0 56250 63000 56750 63500 300 -1
De 0 0 1 0 0
Po 0 56750 63500 57250 63500 300 -1
De 0 0 1 0 0
Po 0 58000 63500 59000 62500 300 -1
De 0 0 1 0 400
Po 0 57250 63500 58000 63500 300 -1
De 0 0 1 0 0
Po 0 48750 62500 48750 62250 300 -1
De 0 0 1 0 800
Po 0 49000 62000 49250 62000 300 -1
De 0 0 1 0 0
Po 0 48750 62250 49000 62000 300 -1
De 0 0 1 0 0
Po 0 49250 62000 49500 62000 300 -1
De 0 0 1 0 0
Po 0 49500 62000 50000 62000 300 -1
De 0 0 1 0 0
Po 0 50000 62000 50500 62000 300 -1
De 0 0 1 0 0
Po 0 50500 62000 51250 62000 300 -1
De 0 0 1 0 0
Po 0 51250 62000 51750 62000 300 -1
De 0 0 1 0 0
Po 0 51750 62000 52000 62000 300 -1
De 0 0 1 0 0
Po 0 52000 62000 52500 62500 300 -1
De 0 0 1 0 400
Po 0 43000 62500 43000 61750 300 -1
De 0 0 1 0 800
Po 0 43000 61750 43750 61000 300 -1
De 0 0 1 0 0
Po 0 45750 61750 45750 62500 300 -1
De 0 0 1 0 400
Po 0 45000 61000 45750 61750 300 -1
De 0 0 1 0 0
Po 0 43750 61000 45000 61000 300 -1
De 0 0 1 0 0
Po 0 57375 58625 57375 57750 300 -1
De 0 0 1 0 400
Po 0 47000 44250 47000 43750 300 -1
De 0 0 1 0 800
Po 0 47000 43750 47250 43500 300 -1
De 0 0 1 0 0
Po 0 47250 43500 51250 43500 300 -1
De 0 0 1 0 0
Po 0 51250 43500 52500 45250 300 -1
De 0 0 1 0 0
Po 0 46875 53125 47250 53125 120 -1
De 0 0 1 0 400
Po 0 46875 53125 46500 52750 300 -1
De 0 0 1 0 0
Po 0 44750 52750 43750 52750 120 -1
De 0 0 1 0 0
Po 0 43250 46250 43250 46500 120 -1
De 0 0 1 0 0
Po 0 43250 47000 43250 47650 120 -1
De 0 0 1 0 0
Po 0 43250 46500 43250 47000 120 -1
De 0 0 1 0 0
Po 0 43250 47650 43250 48250 120 -1
De 0 0 1 0 0
Po 0 41875 49625 41875 50250 120 -1
De 0 0 1 0 400
Po 0 43250 48250 41875 49625 120 -1
De 0 0 1 0 0
Po 0 41875 50250 41875 51168 120 -1
De 0 0 1 0 800
Po 0 45750 62500 48750 62500 120 -1
De 15 0 1 0 C00
Po 0 43000 62500 40000 62500 120 -1
De 15 0 1 0 C00
Po 0 48000 53250 47375 53250 300 -1
De 0 0 1 0 800
Po 0 47375 53250 47250 53125 300 -1
De 0 0 1 0 400
Po 0 49750 51250 49750 51000 120 -1
De 0 0 1 0 0
Po 0 49750 51000 50250 50500 120 -1
De 0 0 1 0 0
Po 0 50250 50500 50250 46000 120 -1
De 0 0 1 0 0
Po 0 50250 46000 50750 45500 120 -1
De 0 0 1 0 0
Po 0 50750 45500 51250 45500 120 -1
De 0 0 1 0 0
Po 0 51250 45500 51500 45250 120 -1
De 0 0 1 0 0
Po 0 51500 45250 52500 45250 300 -1
De 0 0 1 0 0
Po 0 56250 45250 57000 44500 300 -1
De 0 0 1 0 400
Po 0 52500 45250 56250 45250 300 -1
De 0 0 1 0 0
Po 0 60875 54250 60000 54250 300 -1
De 0 0 1 0 C00
Po 0 60500 52250 60875 52625 120 -1
De 0 0 1 0 0
Po 0 48000 53250 48250 53250 300 -1
De 0 0 1 0 800
Po 0 48250 53250 48750 53500 300 -1
De 0 0 1 0 0
Po 3 48750 53500 48750 53500 600 300
De 15 1 1 0 0
Po 0 48750 53500 48500 53500 120 -1
De 15 0 1 0 0
Po 0 48500 53500 48500 52000 120 -1
De 15 0 1 0 0
Po 0 48500 52000 49250 51250 120 -1
De 15 0 1 0 0
Po 0 49250 51250 49750 51250 120 -1
De 15 0 1 0 0
Po 3 49750 51250 49750 51250 600 300
De 15 1 1 0 0
Po 0 49750 51250 50250 51750 300 -1
De 0 0 1 0 0
Po 0 50250 51750 50250 51875 300 -1
De 0 0 1 0 400
Po 0 51000 52250 50750 52000 300 -1
De 0 0 1 0 800
Po 0 50750 52000 50375 52000 300 -1
De 0 0 1 0 0
Po 0 50375 52000 50250 51875 300 -1
De 0 0 1 0 400
Po 0 49375 54500 49375 55500 120 -1
De 0 0 1 0 C00
Po 0 49375 54125 49375 54500 120 -1
De 0 0 1 0 400
Po 0 49000 53750 49375 54125 120 -1
De 0 0 1 0 0
Po 0 48750 53500 49000 53750 120 -1
De 0 0 1 0 0
Po 0 48250 53250 48750 53500 120 -1
De 0 0 1 0 0
Po 0 57000 44500 57000 44750 120 -1
De 0 0 1 0 800
Po 0 57000 44750 57750 45500 300 -1
De 0 0 1 0 0
Po 0 57750 45500 60750 45500 300 -1
De 0 0 1 0 0
Po 0 60750 45500 61750 44500 300 -1
De 0 0 1 0 400
Po 0 52500 54750 51750 54000 120 -1
De 0 0 1 0 800
Po 0 51750 52625 51875 52500 120 -1
De 0 0 1 0 400
Po 0 51750 54000 51750 52625 120 -1
De 0 0 1 0 0
Po 0 51875 52500 51875 51625 300 -1
De 0 0 1 0 800
Po 0 53250 51250 53500 51250 120 -1
De 0 0 1 0 400
Po 0 53000 51500 53250 51250 120 -1
De 0 0 1 0 0
Po 0 52000 51500 53000 51500 300 -1
De 0 0 1 0 0
Po 0 51875 51625 52000 51500 300 -1
De 0 0 1 0 0
Po 0 51000 52250 51625 52250 300 -1
De 0 0 1 0 800
Po 0 51625 52250 51875 52500 120 -1
De 0 0 1 0 400
Po 0 61750 47500 61750 44500 120 -1
De 15 0 1 0 C00
Po 0 57000 47500 57000 44500 120 -1
De 15 0 1 0 C00
Po 0 43250 46250 43250 48250 300 -1
De 0 0 1 0 0
Po 0 43250 48250 41875 49625 300 -1
De 0 0 1 0 0
Po 0 43250 45450 43250 46250 120 -1
De 0 0 1 0 0
Po 0 41875 51168 41750 51293 300 -1
De 0 0 1 0 0
Po 0 43100 52750 41750 52750 300 -1
De 0 0 1 0 0
Po 0 41750 51293 41750 52750 120 -1
De 0 0 1 0 0
Po 0 41750 52750 41750 53125 120 -1
De 0 0 1 0 0
Po 0 41875 51168 41750 51293 120 -1
De 0 0 1 0 0
Po 0 41875 49625 41875 51168 300 -1
De 0 0 1 0 0
Po 0 57500 59043 57500 58800 300 -1
De 0 0 1 0 0
Po 0 57500 58800 57500 58750 300 -1
De 0 0 1 0 0
Po 0 57500 58750 57375 58625 300 -1
De 0 0 1 0 0
Po 0 57500 60000 57500 59043 120 -1
De 0 0 1 0 0
Po 0 48000 57250 47625 57250 120 -1
De 0 0 2 0 800
Po 0 47625 57250 46875 58000 120 -1
De 0 0 2 0 400
Po 0 42707 51750 42457 52000 300 -1
De 0 0 3 0 400
Po 0 42707 51750 42457 52000 120 -1
De 0 0 3 0 400
Po 0 42750 51750 42750 50375 300 -1
De 0 0 3 0 0
Po 0 42750 50375 42625 50250 300 -1
De 0 0 3 0 400
Po 0 44250 52250 44250 52000 300 -1
De 0 0 3 0 800
Po 0 44250 52000 44000 51750 300 -1
De 0 0 3 0 0
Po 0 44000 51750 42750 51750 300 -1
De 0 0 3 0 0
Po 0 42750 51750 42707 51750 300 -1
De 0 0 3 0 0
Po 0 47250 52375 47125 52375 300 -1
De 0 0 3 0 800
Po 0 44500 52000 44250 52250 300 -1
De 0 0 3 0 400
Po 0 46750 52000 44500 52000 300 -1
De 0 0 3 0 0
Po 0 47125 52375 46750 52000 300 -1
De 0 0 3 0 0
Po 0 42707 51750 42707 50332 120 -1
De 0 0 3 0 0
Po 0 42707 50332 42625 50250 120 -1
De 0 0 3 0 400
Po 0 44250 52000 44000 51750 120 -1
De 0 0 3 0 0
Po 0 44000 51750 42707 51750 120 -1
De 0 0 3 0 0
Po 0 47250 52375 47875 52375 120 -1
De 0 0 3 0 800
Po 0 47875 52375 48000 52250 120 -1
De 0 0 3 0 400
Po 0 51000 54250 50750 54250 120 -1
De 0 0 3 0 800
Po 0 50750 54250 50000 53500 120 -1
De 0 0 3 0 0
Po 3 50000 53500 50000 53500 600 300
De 15 1 3 0 0
Po 0 50000 53500 49500 53500 120 -1
De 15 0 3 0 0
Po 0 49500 53500 49000 53000 120 -1
De 15 0 3 0 0
Po 0 49000 53000 49000 52500 120 -1
De 15 0 3 0 0
Po 3 49000 52500 49000 52500 600 300
De 15 1 3 0 0
Po 0 49000 52500 48750 52250 120 -1
De 0 0 3 0 0
Po 0 48750 52250 48000 52250 120 -1
De 0 0 3 0 400
Po 0 56000 49000 56000 49250 120 -1
De 0 0 3 0 800
Po 0 55125 50125 55125 51750 120 -1
De 0 0 3 0 400
Po 0 56000 49250 55125 50125 120 -1
De 0 0 3 0 0
Po 0 53500 52250 54500 52250 120 -1
De 0 0 3 0 800
Po 0 55125 51750 54500 51750 120 -1
De 0 0 3 0 800
Po 0 54500 51750 54500 52250 120 -1
De 0 0 3 0 0
Po 0 54500 52250 54500 53125 120 -1
De 0 0 3 0 400
Po 0 51000 54250 52000 55250 120 -1
De 0 0 3 0 800
Po 0 53000 54250 52500 53750 120 -1
De 0 0 3 0 400
Po 0 53000 55000 53000 54250 120 -1
De 0 0 3 0 0
Po 0 52750 55250 53000 55000 120 -1
De 0 0 3 0 0
Po 0 52000 55250 52750 55250 120 -1
De 0 0 3 0 0
Po 0 52625 52500 52625 53625 120 -1
De 0 0 3 0 800
Po 0 52625 53625 52500 53750 120 -1
De 0 0 3 0 400
Po 0 53500 52250 52875 52250 120 -1
De 0 0 3 0 800
Po 0 52875 52250 52625 52500 120 -1
De 0 0 3 0 400
Po 0 56000 49000 56750 48250 120 -1
De 0 0 3 0 800
Po 0 59500 49000 60750 49000 120 -1
De 0 0 3 0 400
Po 0 58750 48250 59500 49000 120 -1
De 0 0 3 0 0
Po 0 58250 48250 58750 48250 120 -1
De 0 0 3 0 0
Po 0 58250 48250 58250 48250 120 -1
De 0 0 3 0 0
Po 0 56750 48250 58250 48250 120 -1
De 0 0 3 0 0
Po 0 51875 48750 51500 48750 120 -1
De 0 0 4 0 800
Po 0 51500 48750 51000 49250 120 -1
De 0 0 4 0 400
Po 0 51875 49750 51500 49750 120 -1
De 0 0 5 0 800
Po 0 51500 49750 51000 50250 120 -1
De 0 0 5 0 400
Po 0 51875 50750 51500 50750 120 -1
De 0 0 6 0 800
Po 0 51500 50750 51000 51250 120 -1
De 0 0 6 0 400
Po 0 51000 57250 52000 57250 120 -1
De 0 0 7 0 800
Po 0 52000 57250 52500 57750 120 -1
De 0 0 7 0 400
Po 0 49250 51750 49500 52000 120 -1
De 0 0 8 0 0
Po 0 47250 46250 46500 47000 120 -1
De 0 0 8 0 0
Po 0 46500 47000 46500 50750 120 -1
De 0 0 8 0 0
Po 0 46500 50750 47500 51750 120 -1
De 0 0 8 0 0
Po 0 47500 51750 49250 51750 120 -1
De 0 0 8 0 0
Po 0 52500 58750 50500 58750 120 -1
De 0 0 8 0 800
Po 0 50500 58750 50000 58250 120 -1
De 0 0 8 0 0
Po 0 47250 46250 48000 46250 120 -1
De 0 0 8 0 400
Po 0 49500 57750 50000 58250 120 -1
De 0 0 8 0 0
Po 0 49500 56250 49500 57750 120 -1
De 0 0 8 0 0
Po 0 50000 55750 49500 56250 120 -1
De 0 0 8 0 0
Po 0 50000 54250 50000 55750 120 -1
De 0 0 8 0 0
Po 0 49500 53750 50000 54250 120 -1
De 0 0 8 0 0
Po 0 49500 52000 49500 53750 120 -1
De 0 0 8 0 0
Po 0 59000 60500 58750 60500 120 -1
De 0 0 9 0 800
Po 0 56150 60025 55375 59250 120 -1
De 0 0 9 0 400
Po 0 56150 60650 56150 60025 120 -1
De 0 0 9 0 0
Po 0 56500 61000 56150 60650 120 -1
De 0 0 9 0 0
Po 0 58250 61000 56500 61000 120 -1
De 0 0 9 0 0
Po 0 58750 60500 58250 61000 120 -1
De 0 0 9 0 0
Po 0 59000 60500 62000 60500 120 -1
De 15 0 9 0 C00
Po 0 51000 59250 51250 59250 120 -1
De 0 0 10 0 800
Po 0 54375 59500 54625 59250 120 -1
De 0 0 10 0 400
Po 0 51500 59500 54375 59500 120 -1
De 0 0 10 0 0
Po 0 51250 59250 51500 59500 120 -1
De 0 0 10 0 0
Po 0 48000 58250 47500 58750 120 -1
De 0 0 11 0 800
Po 0 47125 58750 46875 59000 120 -1
De 0 0 11 0 400
Po 0 47500 58750 47125 58750 120 -1
De 0 0 11 0 0
Po 0 45750 60500 48750 60500 120 -1
De 15 0 12 0 C00
Po 0 46125 59000 46125 59375 120 -1
De 0 0 12 0 800
Po 0 48250 60000 48750 60500 120 -1
De 0 0 12 0 400
Po 0 46750 60000 48250 60000 120 -1
De 0 0 12 0 0
Po 0 46125 59375 46750 60000 120 -1
De 0 0 12 0 0
Po 0 43000 60500 40000 60500 120 -1
De 15 0 13 0 C00
Po 0 46125 58000 46000 58000 120 -1
De 0 0 13 0 800
Po 0 43500 60500 43000 60500 120 -1
De 0 0 13 0 400
Po 0 46000 58000 43500 60500 120 -1
De 0 0 13 0 0
Po 0 51000 48250 51250 48250 120 -1
De 0 0 14 0 800
Po 0 52500 47000 52875 47000 120 -1
De 0 0 14 0 400
Po 0 51250 48250 52500 47000 120 -1
De 0 0 14 0 0
Po 0 48000 54250 46850 54250 120 -1
De 0 0 15 0 800
Po 0 46850 54250 46200 53600 120 -1
De 0 0 15 0 400
Po 0 48000 54250 48375 54250 120 -1
De 0 0 15 0 800
Po 0 48375 54250 48625 54500 120 -1
De 0 0 15 0 400
Po 0 48000 44250 48000 45500 120 -1
De 0 0 16 0 800
Po 0 48750 48500 48000 49250 120 -1
De 0 0 16 0 400
Po 0 48750 46000 48750 48500 120 -1
De 0 0 16 0 0
Po 0 48500 45750 48750 46000 120 -1
De 0 0 16 0 0
Po 0 48250 45750 48500 45750 120 -1
De 0 0 16 0 0
Po 0 48000 45500 48250 45750 120 -1
De 0 0 16 0 0
Po 0 49500 44250 49500 45000 120 -1
De 0 0 17 0 800
Po 0 47250 48250 48000 48250 120 -1
De 0 0 17 0 400
Po 3 47250 48250 47250 48250 600 300
De 15 1 17 0 0
Po 0 46750 47750 47250 48250 120 -1
De 15 0 17 0 0
Po 0 46750 45500 46750 47750 120 -1
De 15 0 17 0 0
Po 0 47250 45000 46750 45500 120 -1
De 15 0 17 0 0
Po 0 47500 45000 47250 45000 120 -1
De 15 0 17 0 0
Po 0 49500 45000 47500 45000 120 -1
De 15 0 17 0 0
Po 3 49500 45000 49500 45000 600 300
De 15 1 17 0 0
Po 0 48000 47250 47250 47250 120 -1
De 0 0 18 0 800
Po 0 50250 44750 50500 45000 120 -1
De 0 0 18 0 0
Po 3 50500 45000 50500 45000 600 300
De 15 1 18 0 0
Po 0 50500 45000 49750 45500 120 -1
De 15 0 18 0 0
Po 0 49750 45500 47500 45500 120 -1
De 15 0 18 0 0
Po 0 50250 44750 50000 44250 120 -1
De 0 0 18 0 400
Po 0 47250 45750 47500 45500 120 -1
De 15 0 18 0 0
Po 0 47250 47250 47250 45750 120 -1
De 15 0 18 0 0
Po 3 47250 47250 47250 47250 600 300
De 15 1 18 0 0
Po 0 47250 64085 50835 64085 300 -1
De 0 0 19 0 800
Po 0 50835 64085 51000 64250 120 -1
De 0 0 19 0 0
Po 0 51125 64375 51125 64500 120 -1
De 0 0 19 0 400
Po 0 51125 64375 51000 64250 120 -1
De 0 0 19 0 0
Po 0 52625 48750 52625 48625 120 -1
De 0 0 20 0 800
Po 0 53000 48250 53500 48250 120 -1
De 0 0 20 0 400
Po 0 52625 48625 53000 48250 120 -1
De 0 0 20 0 0
Po 0 52625 49750 52750 49750 120 -1
De 0 0 21 0 800
Po 0 53250 49250 53500 49250 120 -1
De 0 0 21 0 400
Po 0 52750 49750 53250 49250 120 -1
De 0 0 21 0 0
Po 0 52625 50750 53000 50750 120 -1
De 0 0 22 0 800
Po 0 53000 50750 53500 50250 120 -1
De 0 0 22 0 400
Po 0 51000 55250 51250 55250 120 -1
De 0 0 23 0 800
Po 0 51750 55750 52500 55750 120 -1
De 0 0 23 0 400
Po 0 51250 55250 51750 55750 120 -1
De 0 0 23 0 0
Po 0 51000 47250 51250 47250 120 -1
De 0 0 24 0 800
Po 0 52500 46000 52875 46000 120 -1
De 0 0 24 0 400
Po 0 51250 47250 52500 46000 120 -1
De 0 0 24 0 0
Po 0 51000 53250 50875 53250 120 -1
De 0 0 25 0 800
Po 0 50875 53250 50250 52625 120 -1
De 0 0 25 0 400
Po 0 60000 57250 60875 57250 120 -1
De 0 0 26 0 C00
Po 0 61625 54250 61625 55250 120 -1
De 0 0 27 0 C00
Po 0 61750 53125 61750 54125 120 -1
De 0 0 27 0 800
Po 0 61750 54125 61625 54250 120 -1
De 0 0 27 0 400
Po 0 61625 55250 61625 57250 120 -1
De 0 0 27 0 C00
Po 0 48500 44250 48500 45300 120 -1
De 0 0 28 0 800
Po 0 49250 49000 48000 50250 120 -1
De 0 0 28 0 400
Po 0 49250 46050 49250 49000 120 -1
De 0 0 28 0 0
Po 0 48500 45300 49250 46050 120 -1
De 0 0 28 0 0
Po 0 48950 44550 48950 44300 120 -1
De 0 0 29 0 0
Po 0 48000 51250 49750 49500 120 -1
De 0 0 29 0 800
Po 0 49750 46050 49750 49500 120 -1
De 0 0 29 0 0
Po 0 48950 45250 49750 46050 120 -1
De 0 0 29 0 0
Po 0 48950 44550 48950 45250 120 -1
De 0 0 29 0 0
Po 0 48950 44300 49000 44250 120 -1
De 0 0 29 0 400
Po 0 48000 55250 46550 55250 120 -1
De 0 0 30 0 800
Po 0 46550 55250 46200 55600 120 -1
De 0 0 30 0 400
Po 0 48000 55250 48375 55250 120 -1
De 0 0 30 0 800
Po 0 48375 55250 48625 55500 120 -1
De 0 0 30 0 400
Po 0 60000 55250 60875 55250 300 -1
De 0 0 31 0 C00
Po 0 51000 58250 54000 58250 120 -1
De 0 0 32 0 800
Po 0 55500 55250 56000 55250 120 -1
De 0 0 32 0 400
Po 0 54750 56000 55500 55250 120 -1
De 0 0 32 0 0
Po 0 54750 57500 54750 56000 120 -1
De 0 0 32 0 0
Po 0 54000 58250 54750 57500 120 -1
De 0 0 32 0 0
Po 0 45250 45125 47375 45125 300 -1
De 0 0 33 0 800
Po 0 47500 45000 47500 44250 300 -1
De 0 0 33 0 400
Po 0 47375 45125 47500 45000 300 -1
De 0 0 33 0 0
Po 0 44625 45750 45250 45125 300 -1
De 0 0 33 0 400
Po 0 44625 45750 45250 45125 120 -1
De 0 0 33 0 400
Po 0 45250 45125 45250 45250 120 -1
De 0 0 33 0 800
Po 0 45250 45250 45250 45125 120 -1
De 0 0 33 0 400
Po 0 43957 45750 44625 45750 300 -1
De 0 0 33 0 800
Po 0 45875 56750 45500 56750 120 -1
De 0 0 34 0 800
Po 0 45000 54000 44250 53250 120 -1
De 0 0 34 0 400
Po 0 45000 56250 45000 54000 120 -1
De 0 0 34 0 0
Po 0 45500 56750 45000 56250 120 -1
De 0 0 34 0 0
Po 0 48000 56250 47125 56250 120 -1
De 0 0 35 0 800
Po 0 47125 56250 46625 56750 120 -1
De 0 0 35 0 400
Po 0 61500 51250 61500 51750 120 -1
De 0 0 36 0 800
Po 0 61750 52000 61750 52375 120 -1
De 0 0 36 0 400
Po 0 61500 51750 61750 52000 120 -1
De 0 0 36 0 0
Po 0 55000 47500 55000 44500 120 -1
De 15 0 37 0 C00
Po 0 55000 47500 55000 47250 120 -1
De 0 0 37 0 800
Po 0 54750 47000 53625 47000 120 -1
De 0 0 37 0 400
Po 0 55000 47250 54750 47000 120 -1
De 0 0 37 0 0
Po 0 54500 48125 54500 48000 120 -1
De 0 0 37 0 800
Po 0 54500 48000 55000 47500 120 -1
De 0 0 37 0 400
Po 0 54500 48875 55125 48875 120 -1
De 0 0 38 0 800
Po 0 55750 48000 56000 48000 120 -1
De 0 0 38 0 400
Po 0 55250 48500 55750 48000 120 -1
De 0 0 38 0 0
Po 0 55250 48750 55250 48500 120 -1
De 0 0 38 0 0
Po 0 55125 48875 55250 48750 120 -1
De 0 0 38 0 0
Po 0 58750 47625 58875 47625 120 -1
De 0 0 39 0 800
Po 0 60500 48000 60750 48000 120 -1
De 0 0 39 0 400
Po 0 60250 48250 60500 48000 120 -1
De 0 0 39 0 0
Po 0 59500 48250 60250 48250 120 -1
De 0 0 39 0 0
Po 0 58875 47625 59500 48250 120 -1
De 0 0 39 0 0
Po 0 53625 46000 54750 46000 120 -1
De 0 0 40 0 800
Po 0 58625 46750 58750 46875 120 -1
De 0 0 40 0 400
Po 0 55500 46750 58625 46750 120 -1
De 0 0 40 0 0
Po 0 54750 46000 55500 46750 120 -1
De 0 0 40 0 0
Po 0 59750 47500 59750 44500 120 -1
De 15 0 40 0 C00
Po 0 59750 47500 59750 47250 120 -1
De 0 0 40 0 800
Po 0 59375 46875 58750 46875 120 -1
De 0 0 40 0 400
Po 0 59750 47250 59375 46875 120 -1
De 0 0 40 0 0
Po 0 52500 60500 55500 60500 120 -1
De 15 0 41 0 C00
Po 0 52500 60500 51250 60500 120 -1
De 0 0 41 0 800
Po 0 49125 58375 49125 57250 120 -1
De 0 0 41 0 400
Po 0 51250 60500 49125 58375 120 -1
De 0 0 41 0 0
Po 0 52750 65375 52750 65950 300 -1
De 0 0 42 0 800
Po 0 52750 65950 52700 66000 300 -1
De 0 0 42 0 400
Po 0 52000 66750 55450 66750 120 -1
De 15 0 42 0 0
Po 0 39900 59400 39500 59800 120 -1
De 15 0 42 0 0
Po 0 39500 59800 39500 63750 120 -1
De 15 0 42 0 0
Po 0 39500 63750 42500 66750 120 -1
De 15 0 42 0 0
Po 0 42500 66750 52000 66750 120 -1
De 15 0 42 0 0
Po 3 41000 59400 41000 59400 600 300
De 15 1 42 0 0
Po 0 41000 59400 39900 59400 120 -1
De 15 0 42 0 0
Po 3 56050 66150 56050 66150 600 300
De 15 1 42 0 0
Po 0 55450 66750 56050 66150 120 -1
De 15 0 42 0 0
Po 0 57300 66150 56050 66150 300 -1
De 0 0 42 0 0
Po 0 56200 62800 56750 63350 120 -1
De 15 0 42 0 0
Po 0 56675 58650 56200 58650 300 -1
De 0 0 42 0 800
Po 3 56200 58650 56200 58650 600 300
De 15 1 42 0 0
Po 0 56200 58650 56200 62800 120 -1
De 15 0 42 0 0
Po 3 57300 66150 57300 66150 600 300
De 15 1 42 0 0
Po 0 58250 65200 57300 66150 120 -1
De 15 0 42 0 0
Po 0 58250 63800 58250 65200 120 -1
De 15 0 42 0 0
Po 0 57800 63350 58250 63800 120 -1
De 15 0 42 0 0
Po 0 56750 63350 57800 63350 120 -1
De 15 0 42 0 0
Po 0 56050 66150 55025 66150 300 -1
De 0 0 42 0 0
Po 0 55025 66150 55000 66125 300 -1
De 0 0 42 0 400
Po 0 41000 59400 41000 53775 120 -1
De 0 0 42 0 0
Po 0 41000 53775 41125 53650 120 -1
De 0 0 42 0 400
Po 0 41125 53650 41125 52082 120 -1
De 0 0 42 0 800
Po 0 41125 52082 41043 52000 120 -1
De 0 0 42 0 400
Po 0 56793 59400 56793 58768 300 -1
De 0 0 42 0 800
Po 0 56793 58768 56675 58650 300 -1
De 0 0 42 0 400
Po 0 41043 52000 41043 53568 300 -1
De 0 0 42 0 800
Po 0 41043 53568 41125 53650 300 -1
De 0 0 42 0 400
Po 0 42075 47650 41600 47650 300 -1
De 0 0 42 0 800
Po 0 41413 47463 41413 47462 300 -1
De 0 0 42 0 0
Po 0 41600 47650 41413 47463 300 -1
De 0 0 42 0 0
Po 0 41043 52000 41043 51793 300 -1
De 0 0 42 0 800
Po 0 41043 51793 40750 51500 300 -1
De 0 0 42 0 0
Po 0 41125 52082 41043 52000 300 -1
De 0 0 42 0 400
Po 0 40750 51500 40750 48125 300 -1
De 0 0 42 0 0
Po 0 40750 48125 41413 47462 300 -1
De 0 0 42 0 0
Po 0 41413 47462 42125 46750 300 -1
De 0 0 42 0 0
Po 0 42000 46500 42125 46750 300 -1
De 0 0 42 0 0
Po 0 42125 46750 42043 46750 120 -1
De 0 0 42 0 0
Po 0 42043 46750 41043 47750 120 -1
De 0 0 42 0 0
Po 0 42125 46750 42000 46750 120 -1
De 0 0 42 0 0
Po 0 42125 46750 42000 46750 120 -1
De 0 0 42 0 0
Po 0 41043 47750 41043 47750 120 -1
De 0 0 42 0 0
Po 0 42000 46750 41043 47750 120 -1
De 0 0 42 0 0
Po 0 42125 46750 42125 45875 120 -1
De 0 0 42 0 0
Po 0 42125 45875 42250 45750 120 -1
De 0 0 42 0 0
Po 0 41043 47750 41043 47750 120 -1
De 0 0 42 0 0
Po 0 42000 46000 42000 46500 300 -1
De 0 0 42 0 0
Po 0 42543 45750 42250 45750 300 -1
De 0 0 42 0 800
Po 0 42250 45750 42000 46000 300 -1
De 0 0 42 0 0
Po 0 41000 59400 41000 53375 300 -1
De 0 0 42 0 0
Po 0 53750 66000 54000 66000 300 -1
De 0 0 42 0 0
Po 0 54125 66125 55000 66125 300 -1
De 0 0 42 0 400
Po 0 54000 66000 54125 66125 300 -1
De 0 0 42 0 0
Po 0 53750 66000 53750 65375 300 -1
De 0 0 42 0 400
Po 0 52750 66000 53750 66000 300 -1
De 0 0 42 0 0
Po 0 51500 65500 51500 65750 120 -1
De 0 0 42 0 800
Po 0 51500 65750 51750 66000 120 -1
De 0 0 42 0 0
Po 0 51750 66000 52750 66000 300 -1
De 0 0 42 0 0
Po 0 52750 66000 52750 65375 300 -1
De 0 0 42 0 400
Po 0 51000 56250 50875 56250 120 -1
De 0 0 43 0 800
Po 0 50875 56250 49875 57250 120 -1
De 0 0 43 0 400
Po 0 51000 56250 52000 56250 120 -1
De 0 0 43 0 800
Po 0 52000 56250 52500 56750 120 -1
De 0 0 43 0 400
Po 0 56000 56250 55500 56250 120 -1
De 0 0 44 0 800
Po 0 49000 59250 48000 59250 120 -1
De 0 0 44 0 400
Po 0 51000 61250 49000 59250 120 -1
De 0 0 44 0 0
Po 0 54250 61250 51000 61250 120 -1
De 0 0 44 0 0
Po 0 54500 61000 54250 61250 120 -1
De 0 0 44 0 0
Po 0 54750 60750 54500 61000 120 -1
De 0 0 44 0 0
Po 0 54750 60000 54750 60750 120 -1
De 0 0 44 0 0
Po 0 55000 59750 54750 60000 120 -1
De 0 0 44 0 0
Po 0 55000 58250 55000 59750 120 -1
De 0 0 44 0 0
Po 0 55250 58000 55000 58250 120 -1
De 0 0 44 0 0
Po 0 55250 56500 55250 58000 120 -1
De 0 0 44 0 0
Po 0 55500 56250 55250 56500 120 -1
De 0 0 44 0 0
Po 0 54500 65000 54625 65000 120 -1
De 0 0 45 0 0
Po 0 54625 65000 55000 65375 120 -1
De 0 0 45 0 400
Po 0 51875 65500 51875 65125 120 -1
De 0 0 45 0 800
Po 0 54500 65000 55250 64500 120 -1
De 0 0 45 0 400
Po 0 52000 65000 54500 65000 120 -1
De 0 0 45 0 0
Po 0 51875 65125 52000 65000 120 -1
De 0 0 45 0 0
Po 0 58207 59400 58207 57832 300 -1
De 0 0 46 0 800
Po 0 58207 57832 58125 57750 300 -1
De 0 0 46 0 400
Po 0 60000 53250 59250 53250 300 -1
De 0 0 46 0 800
Po 0 59250 53250 58250 54250 300 -1
De 0 0 46 0 0
Po 0 58207 57832 58125 57750 120 -1
De 0 0 46 0 400
Po 0 58125 57750 58125 54375 300 -1
De 0 0 46 0 800
Po 0 58125 54375 59250 53250 300 -1
De 0 0 46 0 0
Po 0 56000 53250 56500 53250 120 -1
De 0 0 47 0 800
Po 0 54250 57000 53500 57750 120 -1
De 0 0 47 0 400
Po 0 54250 56000 54250 57000 120 -1
De 0 0 47 0 0
Po 0 55500 54750 54250 56000 120 -1
De 0 0 47 0 0
Po 0 56500 54750 55500 54750 120 -1
De 0 0 47 0 0
Po 0 56750 54500 56500 54750 120 -1
De 0 0 47 0 0
Po 0 56750 53500 56750 54500 120 -1
De 0 0 47 0 0
Po 0 56500 53250 56750 53500 120 -1
De 0 0 47 0 0
Po 0 56000 53250 56000 51875 120 -1
De 0 0 47 0 800
Po 0 56000 51875 55875 51750 120 -1
De 0 0 47 0 400
Po 0 51125 65500 51125 65325 120 -1
De 0 0 48 0 800
Po 0 51875 64775 51875 64500 120 -1
De 0 0 48 0 400
Po 0 51550 65100 51875 64775 120 -1
De 0 0 48 0 0
Po 0 51350 65100 51550 65100 120 -1
De 0 0 48 0 0
Po 0 51125 65325 51350 65100 120 -1
De 0 0 48 0 0
Po 0 50250 65875 50625 65875 300 -1
De 0 0 48 0 800
Po 0 50625 65875 51000 65500 300 -1
De 0 0 48 0 0
Po 0 47250 65915 50210 65915 300 -1
De 0 0 48 0 800
Po 0 50210 65915 50250 65875 300 -1
De 0 0 48 0 400
Po 0 44000 65875 44625 65875 300 -1
De 0 0 48 0 800
Po 0 44625 65875 44750 65750 300 -1
De 0 0 48 0 400
Po 0 44750 65750 47085 65750 300 -1
De 0 0 48 0 800
Po 0 47085 65750 47250 65915 300 -1
De 0 0 48 0 400
Po 0 50250 65875 50750 65875 120 -1
De 0 0 48 0 800
Po 0 50750 65875 51125 65500 120 -1
De 0 0 48 0 400
Po 0 47250 65915 49210 65915 120 -1
De 0 0 48 0 800
Po 0 49210 65915 49250 65875 120 -1
De 0 0 48 0 400
Po 0 49250 65875 50250 65875 120 -1
De 0 0 48 0 C00
Po 0 44750 65750 47085 65750 120 -1
De 0 0 48 0 800
Po 0 47085 65750 47250 65915 120 -1
De 0 0 48 0 400
Po 0 43750 65875 44625 65875 120 -1
De 0 0 48 0 0
Po 0 44625 65875 44750 65750 120 -1
De 0 0 48 0 400
Po 0 51000 46250 51450 46250 120 -1
De 0 0 49 0 800
Po 0 49000 47750 49000 50500 120 -1
De 15 0 49 0 0
Po 0 49000 50500 48750 50750 120 -1
De 15 0 49 0 0
Po 0 48750 50750 46500 50750 120 -1
De 15 0 49 0 0
Po 0 46500 50750 45500 51750 120 -1
De 15 0 49 0 0
Po 0 45500 51750 45500 56500 120 -1
De 15 0 49 0 0
Po 0 45500 56500 43750 58250 120 -1
De 15 0 49 0 0
Po 0 43750 58250 43750 64500 120 -1
De 15 0 49 0 0
Po 3 43750 64500 43750 64500 600 300
De 15 1 49 0 0
Po 0 49000 47100 49000 47750 120 -1
De 15 0 49 0 0
Po 0 50500 45600 49000 47100 120 -1
De 15 0 49 0 0
Po 0 51300 45600 50500 45600 120 -1
De 15 0 49 0 0
Po 0 51700 46000 51300 45600 120 -1
De 15 0 49 0 0
Po 3 51700 46000 51700 46000 600 300
De 15 1 49 0 0
Po 0 51450 46250 51700 46000 120 -1
De 0 0 49 0 0
Po 0 43750 64125 43750 64750 300 -1
De 0 0 49 0 0
Po 0 43750 64750 43750 64500 300 -1
De 0 0 49 0 0
Po 0 44000 65125 44000 65000 300 -1
De 0 0 49 0 800
Po 0 43750 64125 44125 63750 300 -1
De 0 0 49 0 400
Po 0 44000 65000 43750 64750 300 -1
De 0 0 49 0 0
Po 0 44125 63750 44000 63750 120 -1
De 0 0 49 0 800
Po 0 43750 64500 43750 65125 120 -1
De 0 0 49 0 0
Po 0 43750 64000 43750 64500 120 -1
De 0 0 49 0 0
Po 0 44000 63750 43750 64000 120 -1
De 0 0 49 0 0
Po 0 56000 54250 54500 54250 120 -1
De 0 0 50 0 800
Po 0 53500 55750 53750 55750 120 -1
De 0 0 50 0 800
Po 0 54500 55000 54500 54250 120 -1
De 0 0 50 0 0
Po 0 54500 54250 54500 53875 120 -1
De 0 0 50 0 400
Po 0 53750 55750 54500 55000 120 -1
De 0 0 50 0 0
$EndTRACK
$ZONE
$EndZONE
$EndBOARD
SHAR_EOF
(set 20 11 03 01 11 37 21 'tx.brd'
eval "${shar_touch}") && \
chmod 0644 'tx.brd'
if test $? -ne 0
then ${echo} "restore of tx.brd failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx.brd': 'MD5 check failed'
) << \SHAR_EOF
94a96b4fee8d9ff28c9c67ab9173eecf tx.brd
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx.brd'` -ne 88922 && \
${echo} "restoration warning: size of 'tx.brd' is not 88922"
fi
fi
# ============= tx-cache.lib ==============
if test -f 'tx-cache.lib' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx-cache.lib (file already exists)"
else
${echo} "x - extracting tx-cache.lib (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx-cache.lib' &&
EESchema-LIBRARY Version 2.3 Date: sob, 26 lut 2011, 22:45:57
#
# ATMEGA88
#
DEF ATMEGA88 U 0 40 Y Y 1 F N
F0 "U" -800 -850 60 H V C CNN
F1 "ATMEGA88" -750 800 60 H V C CNN
DRAW
XX VCC 7 -1450 50 300 R 50 50 1 0 W
S -1150 750 1100 -750 0 1 0 N
XX (PCINT14/RESET)_PC6 1 -1450 650 300 R 50 50 1 1 B
XX (PCINT16/RXD)_PD0 2 -1450 550 300 R 50 50 1 1 B
XX (PCINT17/TXD)_PD1 3 -1450 450 300 R 50 50 1 1 B
XX (PCINT18/INT0)_PD2 4 -1450 350 300 R 50 50 1 1 B
XX (PCINT19/OC2B/INT1)_PD3 5 -1450 250 300 R 50 50 1 1 B
XX (PCINT20/XCK/T0)_PD4 6 -1450 150 300 R 50 50 1 1 B
XX GND 8 -1450 -50 300 R 50 50 1 1 W
XX (PCINT6/XTAL1/TOSC1)_PB6 9 -1450 -150 300 R 50 50 1 1 B
XX (PCINT7/XTAL2/TOSC2)_PB7 10 -1450 -250 300 R 50 50 1 1 B
XX AVCC 20 1400 -150 300 L 50 50 1 1 W
XX (PCINT21/OC0B/T1)_PD5 11 -1450 -350 300 R 50 50 1 1 B
XX AREF 21 1400 -50 300 L 50 50 1 1 P
XX (PCINT22/OC0A/AIN0)_PD6 12 -1450 -450 300 R 50 50 1 1 B
XX GND 22 1400 50 300 L 50 50 1 1 W
XX (PCINT23/AIN1)_PD7 13 -1450 -550 300 R 50 50 1 1 B
XX PC0_(ADC0/PCINT8) 23 1400 150 300 L 50 50 1 1 B
XX (PCINT0/CLKO/ICP1)_PB0 14 -1450 -650 300 R 50 50 1 1 B
XX PC1_(ADC1/PCINT9) 24 1400 250 300 L 50 50 1 1 B
XX PB1_(OC1A/PCINT1) 15 1400 -650 300 L 50 50 1 1 B
XX PC2_(ADC2/PCINT10) 25 1400 350 300 L 50 50 1 1 B
XX PB2_(SS/OC1B/PCINT2) 16 1400 -550 300 L 50 50 1 1 B
XX PC3_(ADC3/PCINT11) 26 1400 450 300 L 50 50 1 1 B
XX PB3_(MOSI/OC2A/PCINT3) 17 1400 -450 300 L 50 50 1 1 B
XX PC4_(ADC4/SDA/PCINT12) 27 1400 550 300 L 50 50 1 1 B
XX PB4_(MISO/PCINT4) 18 1400 -350 300 L 50 50 1 1 B
XX PC5_(ADC5/SCL/PCINT13) 28 1400 650 300 L 50 50 1 1 B
XX PB5_(SCK/PCINT5) 19 1400 -250 300 L 50 50 1 1 B
ENDDRAW
ENDDEF
#
# C
#
DEF C C 0 10 N Y 1 F N
F0 "C" 50 100 50 H V L CNN
F1 "C" 50 -100 50 H V L CNN
$FPLIST
X SM*
X C?
X C1-1
$ENDFPLIST
DRAW
P 2 0 1 10 -100 -30 100 -30 N
P 2 0 1 10 -100 30 100 30 N
XX ~ 1 0 200 170 D 40 40 1 1 P
XX ~ 2 0 -200 170 U 40 40 1 1 P
ENDDRAW
ENDDEF
#
# CONN_2
#
DEF CONN_2 P 0 40 Y N 1 F N
F0 "P" -50 0 40 V V C CNN
F1 "CONN_2" 50 0 40 V V C CNN
DRAW
S -100 150 100 -150 0 1 0 N
XX P1 1 -350 100 250 R 60 60 1 1 P I
XX PM 2 -350 -100 250 R 60 60 1 1 P I
ENDDRAW
ENDDEF
#
# CONN_5
#
DEF CONN_5 P 0 40 Y Y 1 F N
F0 "P" -50 0 50 V V C CNN
F1 "CONN_5" 50 0 50 V V C CNN
DRAW
S -100 250 100 -250 0 1 0 f
XX ~ 1 -400 200 300 R 60 60 1 1 P I
XX ~ 2 -400 100 300 R 60 60 1 1 P I
XX ~ 3 -400 0 300 R 60 60 1 1 P I
XX ~ 4 -400 -100 300 R 60 60 1 1 P I
XX ~ 5 -400 -200 300 R 60 60 1 1 P I
ENDDRAW
ENDDEF
#
# CONN_6X2
#
DEF CONN_6X2 P 0 40 Y N 1 F N
F0 "P" 0 350 60 H V C CNN
F1 "CONN_6X2" 0 0 60 V V C CNN
DRAW
S -100 300 100 -300 0 1 0 N
XX P1 1 -400 250 300 R 60 60 1 1 P I
XX P2 2 400 250 300 L 60 60 1 1 P I
XX P3 3 -400 150 300 R 60 60 1 1 P I
XX P4 4 400 150 300 L 60 60 1 1 P I
XX P5 5 -400 50 300 R 60 60 1 1 P I
XX P6 6 400 50 300 L 60 60 1 1 P I
XX P7 7 -400 -50 300 R 60 60 1 1 P I
XX P8 8 400 -50 300 L 60 60 1 1 P I
XX 9 9 -400 -150 300 R 60 60 1 1 P I
XX 10 10 400 -150 300 L 60 60 1 1 P I
XX 11 11 -400 -250 300 R 60 60 1 1 P I
XX 12 12 400 -250 300 L 60 60 1 1 P I
ENDDRAW
ENDDEF
#
# CP
#
DEF CP C 0 10 N N 1 F N
F0 "C" 50 100 50 H V L CNN
F1 "CP" 50 -100 50 H V L CNN
ALIAS CAPAPOL
$FPLIST
X CP*
X SM*
$ENDFPLIST
DRAW
P 4 0 1 8 -100 50 -100 -50 100 -50 100 50 N
P 4 0 1 0 -50 50 -50 -20 50 -20 50 50 F
XX ~ 1 0 200 150 D 40 40 1 1 P
XX ~ 2 0 -200 150 U 40 40 1 1 P
ENDDRAW
ENDDEF
#
# CRYSTAL
#
DEF CRYSTAL X 0 40 N N 1 F N
F0 "X" 0 150 60 H V C CNN
F1 "CRYSTAL" 0 -150 60 H V C CNN
DRAW
P 2 0 1 16 -100 100 -100 -100 N
P 2 0 1 16 100 100 100 -100 N
P 5 0 1 12 -50 50 50 50 50 -50 -50 -50 -50 50 f
XX 1 1 -300 0 200 R 40 40 1 1 P
XX 2 2 300 0 200 L 40 40 1 1 P
ENDDRAW
ENDDEF
#
# CS5343
#
DEF CS5343 U 0 40 Y Y 1 F N
F0 "U" 0 -350 60 H V C CNN
F1 "CS5343" 0 350 60 H V C CNN
F2 "TSSOP-10" -100 -450 60 H I C CNN
F3 "www.cirrus.com/en/pubs/proDatasheet/CS5343_F3.pdf" 50 -550 60 H I C CNN
DRAW
S -250 300 300 -300 0 1 0 N
XX SDOUT 1 -550 200 300 R 50 50 1 1 O
XX SCLK 2 -550 100 300 R 50 50 1 1 B
XX LRCK 3 -550 0 300 R 50 50 1 1 B
XX MCLK 4 -550 -100 300 R 50 50 1 1 I
XX FILT+ 5 -550 -200 300 R 50 50 1 1 O
XX AINL 6 600 -200 300 L 50 50 1 1 I
XX VQ 7 600 -100 300 L 50 50 1 1 O
XX AINR 8 600 0 300 L 50 50 1 1 I
XX GND 9 600 100 300 L 50 50 1 1 W
XX VA 10 600 200 300 L 50 50 1 1 W
ENDDRAW
ENDDEF
#
# GND
#
DEF ~GND #PWR 0 0 Y Y 1 F P
F0 "#PWR" 0 0 30 H I C CNN
F1 "GND" 0 -70 30 H I C CNN
DRAW
P 4 0 1 0 -50 0 0 -50 50 0 -50 0 N
XX GND 1 0 0 0 U 30 30 1 1 W N
ENDDRAW
ENDDEF
#
# INDUCTOR
#
DEF INDUCTOR L 0 40 N N 1 F N
F0 "L" -50 0 40 V V C CNN
F1 "INDUCTOR" 100 0 40 V V C CNN
DRAW
A 0 -150 50 -889 889 0 1 0 N 1 -199 1 -100
A 0 -49 51 -889 889 0 1 0 N 1 -99 1 2
A 0 51 51 -889 889 0 1 0 N 1 1 1 102
A 0 148 48 -889 889 0 1 0 N 1 101 1 196
XX 1 1 0 300 100 D 70 70 1 1 P
XX 2 2 0 -300 100 U 70 70 1 1 P
ENDDRAW
ENDDEF
#
# LED
#
DEF LED D 0 40 Y N 1 F N
F0 "D" 0 100 50 H V C CNN
F1 "LED" 0 -100 50 H V C CNN
$FPLIST
X LED-3MM
X LED-5MM
X LED-10MM
X LED-0603
X LED-0805
X LED-1206
X LEDV
$ENDFPLIST
DRAW
P 2 0 1 0 50 50 50 -50 N
P 3 0 1 0 -50 50 50 0 -50 -50 F
P 3 0 1 0 65 -40 110 -80 105 -55 N
P 3 0 1 0 80 -25 125 -65 120 -40 N
XX A 1 -200 0 150 R 40 40 1 1 P
XX K 2 200 0 150 L 40 40 1 1 P
ENDDRAW
ENDDEF
#
# LP2950
#
DEF LP2950 U 0 30 Y Y 1 F N
F0 "U" 150 -196 60 H V C CNN
F1 "LP2950" 0 200 60 H V C CNN
ALIAS LM7805 LM7812 78L05
DRAW
S -200 -150 200 150 0 1 0 N
XX VO 1 400 50 200 L 40 40 1 1 w
XX GND 2 0 -250 100 U 40 40 1 1 I
XX VI 3 -400 50 200 R 40 40 1 1 I
ENDDRAW
ENDDEF
#
# MCP1640
#
DEF MCP1640 U 0 40 Y Y 1 F N
F0 "U" 150 -250 60 H V C CNN
F1 "MCP1640" 0 250 60 H V C CNN
DRAW
S -250 200 250 -200 0 1 0 N
XX SW 1 -550 100 300 R 50 50 1 1 U
XX GND 2 -550 0 300 R 50 50 1 1 W
XX EN 3 -550 -100 300 R 50 50 1 1 I
XX VFB 4 550 -100 300 L 50 50 1 1 I
XX VOUT 5 550 0 300 L 50 50 1 1 w
XX VIN 6 550 100 300 L 50 50 1 1 W
ENDDRAW
ENDDEF
#
# POT
#
DEF POT RV 0 40 Y N 1 F N
F0 "RV" 0 -100 50 H V C CNN
F1 "POT" 0 0 50 H V C CNN
DRAW
S -150 50 150 -50 0 1 0 N
P 3 0 1 0 0 50 -20 70 20 70 F
XX 1 1 -250 0 100 R 40 40 1 1 P
XX 2 2 0 150 80 D 40 40 1 1 P
XX 3 3 250 0 100 L 40 40 1 1 P
ENDDRAW
ENDDEF
#
# R
#
DEF R R 0 0 N Y 1 F N
F0 "R" 80 0 50 V V C CNN
F1 "R" 0 0 50 V V C CNN
$FPLIST
X R?
X SM0603
X SM0805
X R?-*
$ENDFPLIST
DRAW
S -40 150 40 -150 0 1 12 N
XX ~ 1 0 250 100 D 60 60 1 1 P
XX ~ 2 0 -250 100 U 60 60 1 1 P
ENDDRAW
ENDDEF
#
# RFM70
#
DEF RFM70 U 0 40 Y Y 1 F N
F0 "U" 50 -450 60 H V C CNN
F1 "RFM70" 50 450 60 H V C CNN
$FPLIST
X RFM70
$ENDFPLIST
DRAW
S -100 400 150 -400 0 1 0 N
XX IRQ 1 -400 350 300 R 50 50 1 1 O
XX MISO 2 -400 250 300 R 50 50 1 1 O
XX MOSI 3 -400 150 300 R 50 50 1 1 I
XX SCK 4 -400 50 300 R 50 50 1 1 I
XX CSN 5 -400 -50 300 R 50 50 1 1 I
XX CE 6 -400 -150 300 R 50 50 1 1 I
XX VDD 7 -400 -250 300 R 50 50 1 1 W
XX GND 8 -400 -350 300 R 50 50 1 1 W
ENDDRAW
ENDDEF
#
# SW_PUSH
#
DEF SW_PUSH SW 0 40 N N 1 F N
F0 "SW" 150 110 50 H V C CNN
F1 "SW_PUSH" 0 -80 50 H V C CNN
DRAW
S -170 50 170 60 0 1 0 N
P 4 0 1 0 -40 60 -30 90 30 90 40 60 N
XX 1 1 -300 0 200 R 60 60 0 1 P I
XX 2 2 300 0 200 L 60 60 0 1 P I
ENDDRAW
ENDDEF
#
#End Library
SHAR_EOF
(set 20 11 02 28 09 20 08 'tx-cache.lib'
eval "${shar_touch}") && \
chmod 0644 'tx-cache.lib'
if test $? -ne 0
then ${echo} "restore of tx-cache.lib failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx-cache.lib': 'MD5 check failed'
) << \SHAR_EOF
4853198a5cc1bb880f16eaa6031994e2 tx-cache.lib
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx-cache.lib'` -ne 6997 && \
${echo} "restoration warning: size of 'tx-cache.lib' is not 6997"
fi
fi
# ============= tx_io-cache.lib ==============
if test -f 'tx_io-cache.lib' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx_io-cache.lib (file already exists)"
else
${echo} "x - extracting tx_io-cache.lib (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx_io-cache.lib' &&
EESchema-LIBRARY Version 2.3 Date: wto, 1 mar 2011, 11:51:18
#
# CONN_5
#
DEF CONN_5 P 0 40 Y Y 1 F N
F0 "P" -50 0 50 V V C CNN
F1 "CONN_5" 50 0 50 V V C CNN
DRAW
S -100 250 100 -250 0 1 0 f
XX ~ 1 -400 200 300 R 60 60 1 1 P I
XX ~ 2 -400 100 300 R 60 60 1 1 P I
XX ~ 3 -400 0 300 R 60 60 1 1 P I
XX ~ 4 -400 -100 300 R 60 60 1 1 P I
XX ~ 5 -400 -200 300 R 60 60 1 1 P I
ENDDRAW
ENDDEF
#
# GND
#
DEF ~GND #PWR 0 0 Y Y 1 F P
F0 "#PWR" 0 0 30 H I C CNN
F1 "GND" 0 -70 30 H I C CNN
DRAW
P 4 0 1 0 -50 0 0 -50 50 0 -50 0 N
XX GND 1 0 0 0 U 30 30 1 1 W N
ENDDRAW
ENDDEF
#
# POT
#
DEF POT RV 0 40 Y N 1 F N
F0 "RV" 0 -100 50 H V C CNN
F1 "POT" 0 0 50 H V C CNN
DRAW
S -150 50 150 -50 0 1 0 N
P 3 0 1 0 0 50 -20 70 20 70 F
XX 1 1 -250 0 100 R 40 40 1 1 P
XX 2 2 0 150 80 D 40 40 1 1 P
XX 3 3 250 0 100 L 40 40 1 1 P
ENDDRAW
ENDDEF
#
#End Library
SHAR_EOF
(set 20 11 03 01 11 51 18 'tx_io-cache.lib'
eval "${shar_touch}") && \
chmod 0644 'tx_io-cache.lib'
if test $? -ne 0
then ${echo} "restore of tx_io-cache.lib failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx_io-cache.lib': 'MD5 check failed'
) << \SHAR_EOF
0bcacc4b2102fc981306f17aff3fb217 tx_io-cache.lib
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx_io-cache.lib'` -ne 838 && \
${echo} "restoration warning: size of 'tx_io-cache.lib' is not 838"
fi
fi
# ============= tx_io.sch ==============
if test -f 'tx_io.sch' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx_io.sch (file already exists)"
else
${echo} "x - extracting tx_io.sch (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx_io.sch' &&
EESchema Schematic File Version 2 date wto, 1 mar 2011, 11:51:18
LIBS:power
LIBS:device
LIBS:transistors
LIBS:conn
LIBS:linear
LIBS:regul
LIBS:74xx
LIBS:cmos4000
LIBS:adc-dac
LIBS:memory
LIBS:xilinx
LIBS:special
LIBS:microcontrollers
LIBS:dsp
LIBS:microchip
LIBS:analog_switches
LIBS:motorola
LIBS:texas
LIBS:intel
LIBS:audio
LIBS:interface
LIBS:digital-audio
LIBS:philips
LIBS:display
LIBS:cypress
LIBS:siliconi
LIBS:opto
LIBS:atmel
LIBS:contrib
LIBS:valves
LIBS:tx_io-cache
EELAYER 24 0
EELAYER END
$Descr A4 11700 8267
Sheet 1 1
Title "noname.sch"
Date "1 mar 2011"
Rev ""
Comp ""
Comment1 ""
Comment2 ""
Comment3 ""
Comment4 ""
$EndDescr
Wire Wire Line
X 2900 1400 2700 1400
Wire Wire Line
X 2900 1200 2700 1200
Wire Wire Line
X 2900 1000 2700 1000
Wire Wire Line
X 4050 2350 4150 2350
Wire Wire Line
X 4050 1700 4400 1700
Wire Wire Line
X 5300 2300 5300 2250
Wire Wire Line
X 5300 2250 5200 2250
Connection ~ 4150 1850
Connection ~ 4650 1850
Connection ~ 4650 1500
Wire Wire Line
X 4650 2350 4650 1150
Connection ~ 4150 1500
Wire Wire Line
X 4150 2350 4150 1150
Wire Wire Line
X 4400 1000 4050 1000
Wire Wire Line
X 4400 1350 4050 1350
Wire Wire Line
X 2900 1100 2700 1100
Wire Wire Line
X 2900 1300 2700 1300
Text GLabel 2900 1400 2 48 Input ~ 0
IO_P3
Text GLabel 2900 1300 2 48 Input ~ 0
IO_P2
Text GLabel 2900 1200 2 48 Input ~ 0
IO_P1
Text GLabel 2900 1100 2 48 Input ~ 0
GND
Text GLabel 2900 1000 2 48 Input ~ 0
VCC
$Comp
L CONN_5 P?
U 1 1 4D6CCEEC
P 2300 1200
F 0 "P?" V 2250 1200 50 0000 C CNN
F 1 "CONN_5" V 2350 1200 50 0000 C CNN
X 1 2300 1200
X -1 0 0 -1
$EndComp
Text Notes 2850 2700 0 60 ~ 0
I/O BLOCK FOR TRANSMITTER FOR THE DIGITAL WIRELESS GUITAR SYSTEM
Text Notes 3500 2850 0 60 ~ 0
This is a public domain schematic diagram\nprepared by Wojciech M. Zabołotny\n(wz...@ise.pw.edu.pl) 23.01.2011
Text Notes 3950 900 0 60 ~ 0
Analog controllers
$Comp
L GND #PWR3
U 1 1 4D2C2996
P 4650 2350
F 0 "#PWR3" H 4650 2350 30 0001 C CNN
F 1 "GND" H 4650 2280 30 0001 C CNN
X 1 4650 2350
X 1 0 0 -1
$EndComp
$Comp
L GND #PWR1
U 1 1 4D2C297B
P 5300 2300
F 0 "#PWR1" H 5300 2300 30 0001 C CNN
F 1 "GND" H 5300 2230 30 0001 C CNN
X 1 5300 2300
X 1 0 0 -1
$EndComp
Text GLabel 5200 2250 0 48 Input ~ 0
GND
Text GLabel 4050 2350 0 48 Input ~ 0
VCC
Text GLabel 4050 1700 0 48 Input ~ 0
IO_P3
Text GLabel 4050 1350 0 48 Input ~ 0
IO_P2
Text GLabel 4050 1000 0 48 Input ~ 0
IO_P1
$Comp
L POT RV3
U 1 1 4D2C28BB
P 4400 1850
F 0 "RV3" H 4400 1750 50 0000 C CNN
F 1 "POT" H 4400 1850 50 0000 C CNN
X 1 4400 1850
X 1 0 0 -1
$EndComp
$Comp
L POT RV2
U 1 1 4D2C28B7
P 4400 1500
F 0 "RV2" H 4400 1400 50 0000 C CNN
F 1 "POT" H 4400 1500 50 0000 C CNN
X 1 4400 1500
X 1 0 0 -1
$EndComp
$Comp
L POT RV1
U 1 1 4D2C28AD
P 4400 1150
F 0 "RV1" H 4400 1050 50 0000 C CNN
F 1 "POT" H 4400 1150 50 0000 C CNN
X 1 4400 1150
X 1 0 0 -1
$EndComp
$EndSCHEMATC
SHAR_EOF
(set 20 11 03 01 11 51 18 'tx_io.sch'
eval "${shar_touch}") && \
chmod 0644 'tx_io.sch'
if test $? -ne 0
then ${echo} "restore of tx_io.sch failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx_io.sch': 'MD5 check failed'
) << \SHAR_EOF
7c36e53fc2e09703f420687c19558c78 tx_io.sch
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx_io.sch'` -ne 2979 && \
${echo} "restoration warning: size of 'tx_io.sch' is not 2979"
fi
fi
# ============= tx.sch ==============
if test -f 'tx.sch' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx.sch (file already exists)"
else
${echo} "x - extracting tx.sch (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx.sch' &&
EESchema Schematic File Version 2 date sob, 26 lut 2011, 22:45:57
LIBS:power
LIBS:device
LIBS:transistors
LIBS:conn
LIBS:linear
LIBS:regul
LIBS:74xx
LIBS:cmos4000
LIBS:adc-dac
LIBS:memory
LIBS:xilinx
LIBS:special
LIBS:microcontrollers
LIBS:dsp
LIBS:microchip
LIBS:analog_switches
LIBS:motorola
LIBS:texas
LIBS:intel
LIBS:audio
LIBS:interface
LIBS:digital-audio
LIBS:philips
LIBS:display
LIBS:cypress
LIBS:siliconi
LIBS:opto
LIBS:atmel
LIBS:contrib
LIBS:valves
LIBS:cs5343_4
LIBS:rfm70
LIBS:opendous
LIBS:mcp1640
LIBS:tx-cache
EELAYER 24 0
EELAYER END
$Descr A4 11700 8267
Sheet 1 1
Title ""
Date "26 feb 2011"
Rev ""
Comp ""
Comment1 ""
Comment2 ""
Comment3 ""
Comment4 ""
$EndDescr
Wire Wire Line
X 9050 1850 9500 1850
Connection ~ 9050 900
Wire Wire Line
X 9050 1850 9050 900
Connection ~ 9250 900
Wire Wire Line
X 9850 900 8800 900
Wire Wire Line
X 9850 1300 9850 1400
Wire Wire Line
X 5900 1250 5900 1350
Wire Wire Line
X 7450 1350 7450 1150
Wire Wire Line
X 7450 1150 7550 1150
Wire Wire Line
X 6650 2450 6650 2500
Connection ~ 9300 1850
Wire Wire Line
X 8650 800 6850 800
Connection ~ 6350 1050
Wire Wire Line
X 6350 1050 6350 1300
Wire Wire Line
X 5300 1950 6000 1950
Wire Wire Line
X 9300 2500 9500 2500
Wire Wire Line
X 2300 5550 2300 5600
Wire Wire Line
X 5900 1050 6850 1050
Connection ~ 3600 5100
Connection ~ 3600 5350
Connection ~ 3600 5600
Wire Wire Line
X 6100 3000 6100 1700
Wire Wire Line
X 6100 3000 5900 3000
Wire Wire Line
X 5900 3300 5950 3300
Wire Wire Line
X 6850 1950 6850 2800
Wire Wire Line
X 2100 3700 3050 3700
Wire Wire Line
X 1500 3700 1400 3700
Connection ~ 8250 1550
Wire Wire Line
X 8300 1550 8200 1550
Wire Wire Line
X 7700 1550 7700 1750
Wire Wire Line
X 6650 1700 6650 1750
Connection ~ 6850 1050
Wire Wire Line
X 8650 800 8650 1050
Wire Wire Line
X 2000 1400 1850 1400
Wire Wire Line
X 2000 1200 1850 1200
Wire Wire Line
X 4200 2450 4100 2450
Wire Wire Line
X 2650 4700 2500 4700
Wire Wire Line
X 4250 4850 4450 4850
Wire Wire Line
X 3800 1950 3750 1950
Wire Wire Line
X 3800 1700 3750 1700
Wire Wire Line
X 5050 4850 4950 4850
Wire Wire Line
X 8300 3000 8250 3000
Wire Wire Line
X 8300 2600 8250 2600
Wire Wire Line
X 7800 3250 7800 3900
Wire Wire Line
X 7800 3250 8450 3250
Wire Wire Line
X 7100 2700 7100 3900
Wire Wire Line
X 3050 4000 2950 4000
Connection ~ 4700 1950
Connection ~ 4700 1700
Wire Wire Line
X 2300 3100 2300 2850
Wire Wire Line
X 2300 3100 3050 3100
Wire Wire Line
X 7550 5550 7550 5250
Wire Wire Line
X 7550 5550 7700 5550
Wire Wire Line
X 9300 2250 9300 2350
Wire Wire Line
X 8300 4300 8150 4300
Wire Wire Line
X 9450 3900 10900 3900
Wire Wire Line
X 10900 3900 10900 1850
Wire Wire Line
X 9500 1850 9500 3200
Wire Wire Line
X 10300 2300 10300 2350
Connection ~ 8300 4300
Wire Wire Line
X 1600 2350 2000 2350
Wire Wire Line
X 10300 2550 10300 2500
Wire Wire Line
X 10400 3150 10300 3150
Wire Wire Line
X 10300 3600 10300 3650
Wire Wire Line
X 10300 3150 10300 3200
Wire Wire Line
X 9900 3450 9900 3500
Wire Wire Line
X 9900 2800 9900 2850
Wire Wire Line
X 7000 3800 7000 2800
Wire Wire Line
X 7100 2700 7450 2700
Wire Wire Line
X 4800 1950 4400 1950
Wire Wire Line
X 9400 6000 9400 5900
Wire Wire Line
X 9400 5900 9600 5900
Wire Wire Line
X 8600 6350 8600 6450
Connection ~ 8300 5700
Wire Wire Line
X 8850 5700 8300 5700
Connection ~ 7000 5850
Wire Wire Line
X 7700 5850 7000 5850
Wire Wire Line
X 9450 5100 7000 5100
Wire Wire Line
X 9450 5100 9450 4300
Wire Wire Line
X 6100 4200 5900 4200
Wire Wire Line
X 5900 4200 5900 4100
Connection ~ 6000 3800
Wire Wire Line
X 7200 3050 7200 3000
Wire Wire Line
X 7200 3000 7450 3000
Connection ~ 7950 3900
Wire Wire Line
X 7950 3850 7950 3900
Wire Wire Line
X 7450 2900 6900 2900
Wire Wire Line
X 6900 2900 6900 3700
Wire Wire Line
X 6900 3700 5900 3700
Wire Wire Line
X 3050 2800 3050 2600
Wire Wire Line
X 3050 2600 7450 2600
Wire Wire Line
X 6700 3500 6700 3550
Wire Wire Line
X 5900 3600 6100 3600
Wire Wire Line
X 1600 2950 1750 2950
Wire Wire Line
X 5900 3400 6100 3400
Wire Wire Line
X 9450 4000 10100 4000
Wire Wire Line
X 10100 4000 10100 4250
Wire Wire Line
X 9450 4100 10200 4100
Wire Wire Line
X 5900 4000 6400 4000
Wire Wire Line
X 6400 4000 6400 4100
Wire Wire Line
X 6400 4100 8300 4100
Wire Wire Line
X 2300 2850 1600 2850
Wire Wire Line
X 1600 2550 2700 2550
Wire Wire Line
X 2700 2550 2700 3000
Wire Wire Line
X 2700 3000 3050 3000
Wire Wire Line
X 2200 4100 2200 4200
Connection ~ 2200 3700
Wire Wire Line
X 1400 3700 1400 3450
Wire Wire Line
X 1400 3450 2200 3450
Wire Wire Line
X 2200 3450 2200 3600
Wire Wire Line
X 2200 3600 3050 3600
Wire Wire Line
X 1400 4100 1400 4200
Wire Wire Line
X 1600 2450 2800 2450
Wire Wire Line
X 2800 2450 2800 2900
Wire Wire Line
X 2800 2900 3050 2900
Wire Wire Line
X 3050 3300 2550 3300
Wire Wire Line
X 2550 3300 2550 2650
Wire Wire Line
X 2550 2650 1600 2650
Wire Wire Line
X 3050 3200 2400 3200
Wire Wire Line
X 2400 3200 2400 2750
Wire Wire Line
X 2400 2750 1600 2750
Wire Wire Line
X 3050 4100 3050 4550
Wire Wire Line
X 8300 4200 6500 4200
Wire Wire Line
X 6500 4200 6500 4550
Wire Wire Line
X 6500 4550 3050 4550
Wire Wire Line
X 2950 3500 3050 3500
Wire Wire Line
X 1600 3050 1750 3050
Wire Wire Line
X 2950 3400 3050 3400
Wire Wire Line
X 5900 3500 6450 3500
Wire Wire Line
X 6450 3500 6450 3100
Wire Wire Line
X 6450 3100 6700 3100
Wire Wire Line
X 8300 4000 7700 4000
Wire Wire Line
X 7800 3900 8300 3900
Wire Wire Line
X 7950 3350 8300 3350
Connection ~ 8150 3350
Wire Wire Line
X 8150 3850 8150 4000
Connection ~ 8150 4000
Wire Wire Line
X 7000 3800 5900 3800
Wire Wire Line
X 7100 3900 5900 3900
Wire Wire Line
X 6100 4100 6000 4100
Wire Wire Line
X 6000 4100 6000 3800
Wire Wire Line
X 10200 4100 10200 5250
Wire Wire Line
X 8100 5550 8300 5550
Wire Wire Line
X 8300 5550 8300 5850
Wire Wire Line
X 8300 5850 8100 5850
Wire Wire Line
X 8600 5850 8600 5700
Connection ~ 8600 5700
Wire Wire Line
X 9350 5700 9600 5700
Wire Wire Line
X 4600 1200 4700 1200
Wire Wire Line
X 4400 1700 4900 1700
Wire Wire Line
X 4600 2450 4700 2450
Wire Wire Line
X 7000 2800 7450 2800
Connection ~ 9500 3150
Wire Wire Line
X 10300 2950 10300 3000
Wire Wire Line
X 10300 2500 10450 2500
Wire Wire Line
X 9500 3600 9500 3650
Wire Wire Line
X 5900 3100 5950 3100
Connection ~ 9500 2500
Connection ~ 10300 2500
Connection ~ 10300 3150
Connection ~ 1400 3700
Wire Wire Line
X 9900 2150 9900 2200
Wire Wire Line
X 10300 1900 10300 1850
Wire Wire Line
X 10300 1850 10900 1850
Wire Wire Line
X 7000 5100 7000 5850
Wire Wire Line
X 9450 4200 9550 4200
Wire Wire Line
X 10200 5250 7550 5250
Wire Wire Line
X 3050 3800 2650 3800
Wire Wire Line
X 2650 3800 2650 4200
Wire Wire Line
X 3050 3900 2950 3900
Wire Wire Line
X 7400 3200 7450 3200
Wire Wire Line
X 7450 3200 7450 3100
Wire Wire Line
X 8250 2900 8350 2900
Wire Wire Line
X 8350 2900 8350 3200
Wire Wire Line
X 8350 3200 7700 3200
Wire Wire Line
X 7700 3200 7700 4000
Wire Wire Line
X 8250 2700 8450 2700
Wire Wire Line
X 8450 2700 8450 3250
Wire Wire Line
X 8300 3100 8250 3100
Wire Wire Line
X 8300 2800 8250 2800
Wire Wire Line
X 3750 1700 3750 2050
Connection ~ 3750 1950
Wire Wire Line
X 3650 4850 3600 4850
Wire Wire Line
X 3600 4850 3600 5850
Wire Wire Line
X 3600 5100 3650 5100
Wire Wire Line
X 5050 5100 4950 5100
Wire Wire Line
X 4250 5100 4450 5100
Wire Wire Line
X 4250 5600 4450 5600
Wire Wire Line
X 5050 5600 4950 5600
Wire Wire Line
X 3650 5600 3600 5600
Wire Wire Line
X 3600 5350 3650 5350
Wire Wire Line
X 5050 5350 4950 5350
Wire Wire Line
X 4250 5350 4450 5350
Wire Wire Line
X 4200 1200 4100 1200
Wire Wire Line
X 2100 4700 1950 4700
Wire Wire Line
X 2500 1300 2550 1300
Wire Wire Line
X 2500 1200 2550 1200
Wire Wire Line
X 2500 1400 2550 1400
Wire Wire Line
X 2000 1300 1850 1300
Wire Wire Line
X 1850 1600 2050 1600
Wire Wire Line
X 7550 1050 7450 1050
Wire Wire Line
X 7950 1700 7950 1750
Wire Wire Line
X 8650 1250 8650 1450
Wire Wire Line
X 8650 1450 8250 1450
Wire Wire Line
X 8250 1450 8250 1550
Wire Wire Line
X 9250 1400 9250 1300
Wire Wire Line
X 6850 2800 5900 2800
Wire Wire Line
X 1850 1500 1950 1500
Wire Wire Line
X 1950 1500 1950 1800
Wire Wire Line
X 6850 800 6850 1450
Wire Wire Line
X 5900 3200 5950 3200
Wire Wire Line
X 6000 1950 6000 2900
Wire Wire Line
X 6000 2900 5900 2900
Wire Wire Line
X 6650 1050 6650 1300
Connection ~ 6650 1050
Wire Wire Line
X 2600 5600 2600 5550
Wire Wire Line
X 2600 5150 2150 5150
Connection ~ 2300 5150
Wire Wire Line
X 9300 2900 9300 3000
Wire Wire Line
X 6100 1700 5400 1700
Wire Wire Line
X 6350 1700 6350 1750
Wire Wire Line
X 9500 1300 9500 1400
Wire Wire Line
X 8800 1150 8650 1150
Connection ~ 9500 1850
Wire Wire Line
X 6650 2050 6850 2050
Connection ~ 6850 2050
Wire Wire Line
X 6850 1250 7550 1250
Connection ~ 6850 1250
Wire Wire Line
X 8800 900 8800 1550
Connection ~ 8800 1150
$Comp
L GND #PWR01
U 1 1 4D69615A
P 9850 1400
F 0 "#PWR01" H 9850 1400 30 0001 C CNN
F 1 "GND" H 9850 1330 30 0001 C CNN
X 1 9850 1400
X 1 0 0 -1
$EndComp
$Comp
L CAPAPOL C16
U 1 1 4D696155
P 9850 1100
F 0 "C16" H 9900 1200 50 0000 L CNN
F 1 "47µ" H 9900 1000 50 0000 L CNN
X 1 9850 1100
X 1 0 0 -1
$EndComp
$Comp
L C C11
U 1 1 4D6018E0
P 9250 1100
F 0 "C11" H 9300 1200 50 0000 L CNN
F 1 "200n" H 9300 1000 50 0000 L CNN
X 1 9250 1100
X 1 0 0 -1
$EndComp
$Comp
L C C6
U 1 1 4D6018C1
P 6650 1500
F 0 "C6" H 6700 1600 50 0000 L CNN
F 1 "2u" H 6700 1400 50 0000 L CNN
X 1 6650 1500
X 1 0 0 -1
$EndComp
$Comp
L GND #PWR02
U 1 1 4D601693
P 6650 2500
F 0 "#PWR02" H 6650 2500 30 0001 C CNN
F 1 "GND" H 6650 2430 30 0001 C CNN
X 1 6650 2500
X 1 0 0 -1
$EndComp
$Comp
L C C7
U 1 1 4D60168D
P 6650 2250
F 0 "C7" H 6700 2350 50 0000 L CNN
F 1 "1u" H 6700 2150 50 0000 L CNN
X 1 6650 2250
X 1 0 0 -1
$EndComp
$Comp
L GND #PWR03
U 1 1 4D601601
P 9500 1400
F 0 "#PWR03" H 9500 1400 30 0001 C CNN
F 1 "GND" H 9500 1330 30 0001 C CNN
X 1 9500 1400
X 1 0 0 -1
$EndComp
$Comp
L C C14
U 1 1 4D6015F9
P 9500 1100
F 0 "C14" H 9550 1200 50 0000 L CNN
F 1 "2u" H 9550 1000 50 0000 L CNN
X 1 9500 1100
X 1 0 0 -1
$EndComp
$Comp
L GND #PWR04
U 1 1 4D600DDA
P 6350 1750
F 0 "#PWR04" H 6350 1750 30 0001 C CNN
F 1 "GND" H 6350 1680 30 0001 C CNN
X 1 6350 1750
X 1 0 0 -1
$EndComp
$Comp
L C C5
U 1 1 4D600DCB
P 6350 1500
F 0 "C5" H 6400 1600 50 0000 L CNN
F 1 "2u" H 6400 1400 50 0000 L CNN
X 1 6350 1500
X 1 0 0 -1
$EndComp
$Comp
L GND #PWR05
U 1 1 4D5F032B
P 9300 3000
F 0 "#PWR05" H 9300 3000 30 0001 C CNN
F 1 "GND" H 9300 2930 30 0001 C CNN
X 1 9300 3000
X 1 0 0 -1
$EndComp
$Comp
L C C13
U 1 1 4D5F0324
P 9300 2700
F 0 "C13" H 9350 2800 50 0000 L CNN
F 1 "1u" H 9350 2600 50 0000 L CNN
X 1 9300 2700
X 1 0 0 -1
$EndComp
Text GLabel 2150 5150 0 60 Input ~ 0
VCC
$Comp
L GND #PWR06
U 1 1 4D5F01C8
P 2600 5600
F 0 "#PWR06" H 2600 5600 30 0001 C CNN
F 1 "GND" H 2600 5530 30 0001 C CNN
X 1 2600 5600
X 1 0 0 -1
$EndComp
$Comp
L GND #PWR07
U 1 1 4D5F01C4
P 2300 5600
F 0 "#PWR07" H 2300 5600 30 0001 C CNN
F 1 "GND" H 2300 5530 30 0001 C CNN
X 1 2300 5600
X 1 0 0 -1
$EndComp
$Comp
L C C4
U 1 1 4D5F01C0
P 2600 5350
F 0 "C4" H 2650 5450 50 0000 L CNN
F 1 "1u" H 2650 5250 50 0000 L CNN
X 1 2600 5350
X 1 0 0 -1
$EndComp
$Comp
L C C3
U 1 1 4D5F01BB
P 2300 5350
F 0 "C3" H 2350 5450 50 0000 L CNN
F 1 "1u" H 2350 5250 50 0000 L CNN
X 1 2300 5350
X 1 0 0 -1
$EndComp
$Comp
L ATMEGA88 U2
U 1 1 4D235D02
P 4500 3450
F 0 "U2" H 3700 2600 60 0000 C CNN
F 1 "ATMEGA88" H 3750 4250 60 0000 C CNN
X 1 4500 3450
X 1 0 0 -1
$EndComp
$Comp
L CONN_5 P1
U 1 1 4D580876
P 1450 1400
F 0 "P1" V 1400 1400 50 0000 C CNN
F 1 "CONN_5" V 1500 1400 50 0000 C CNN
X 1 1450 1400
X -1 0 0 1
$EndComp
$Comp
L CRYSTAL X1
U 1 1 4D5805E9
P 1800 3700
F 0 "X1" H 1800 3850 60 0000 C CNN
F 1 "CRYSTAL" H 1800 3550 60 0000 C CNN
X 1 1800 3700
X 1 0 0 -1
$EndComp
$Comp
L GND #PWR08
U 1 1 4D57F59A
P 9250 1400
F 0 "#PWR08" H 9250 1400 30 0001 C CNN
F 1 "GND" H 9250 1330 30 0001 C CNN
X 1 9250 1400
X 1 0 0 -1
$EndComp
$Comp
L GND #PWR09
U 1 1 4D57F544
P 7950 1750
F 0 "#PWR09" H 7950 1750 30 0001 C CNN
F 1 "GND" H 7950 1680 30 0001 C CNN
X 1 7950 1750
X 1 0 0 -1
$EndComp
$Comp
L GND #PWR010
U 1 1 4D57F542
P 7700 1750
F 0 "#PWR010" H 7700 1750 30 0001 C CNN
F 1 "GND" H 7700 1680 30 0001 C CNN
X 1 7700 1750
X 1 0 0 -1
$EndComp
$Comp
L POT RV1
U 1 1 4D57F51B
P 7950 1550
F 0 "RV1" H 7950 1450 50 0000 C CNN
F 1 "POT" H 7950 1550 50 0000 C CNN
X 1 7950 1550
X -1 0 0 1
$EndComp
$Comp
L R R16
U 1 1 4D57F50D
P 8550 1550
F 0 "R16" V 8630 1550 50 0000 C CNN
F 1 "R" V 8550 1550 50 0000 C CNN
X 1 8550 1550
X 0 1 1 0
$EndComp
$Comp
L GND #PWR011
U 1 1 4D57F4BA
P 6650 1750
F 0 "#PWR011" H 6650 1750 30 0001 C CNN
F 1 "GND" H 6650 1680 30 0001 C CNN
X 1 6650 1750
X 1 0 0 -1
$EndComp
$Comp
L GND #PWR012
U 1 1 4D57F475
P 5900 1350
F 0 "#PWR012" H 5900 1350 30 0001 C CNN
F 1 "GND" H 5900 1280 30 0001 C CNN
X 1 5900 1350
X 1 0 0 -1
$EndComp
$Comp
L GND #PWR013
U 1 1 4D57F45B
P 7450 1350
F 0 "#PWR013" H 7450 1350 30 0001 C CNN
F 1 "GND" H 7450 1280 30 0001 C CNN
X 1 7450 1350
X 1 0 0 -1
$EndComp
$Comp
L INDUCTOR L1
U 1 1 4D57F421
P 7150 1050
F 0 "L1" V 7100 1050 40 0000 C CNN
F 1 "INDUCTOR" V 7250 1050 40 0000 C CNN
X 1 7150 1050
X 0 -1 -1 0
$EndComp
$Comp
L MCP1640 U3
U 1 1 4D57F3E3
P 8100 1150
F 0 "U3" H 8250 900 60 0000 C CNN
F 1 "MCP1640" H 8100 1400 60 0000 C CNN
X 1 8100 1150
X 1 0 0 -1
$EndComp
Text GLabel 2050 1600 2 60 Input ~ 0
VCC
$Comp
L GND #PWR014
U 1 1 4D57EFE3
P 1950 1800
F 0 "#PWR014" H 1950 1800 30 0001 C CNN
F 1 "GND" H 1950 1730 30 0001 C CNN
X 1 1950 1800
X 1 0 0 -1
$EndComp
$Comp
L R R13
U 1 1 4D57C42D
P 6850 1700
F 0 "R13" V 6800 1450 50 0000 C CNN
F 1 "200" V 6850 1700 50 0000 C CNN
X 1 6850 1700
X -1 0 0 1
$EndComp
$Comp
L R R3
U 1 1 4D57C429
P 2250 1400
F 0 "R3" V 2200 1150 50 0000 C CNN
F 1 "200" V 2250 1400 50 0000 C CNN
X 1 2250 1400
X 0 1 1 0
$EndComp
$Comp
L R R2
U 1 1 4D57C427
P 2250 1300
F 0 "R2" V 2200 1050 50 0000 C CNN
F 1 "200" V 2250 1300 50 0000 C CNN
X 1 2250 1300
X 0 1 1 0
$EndComp
$Comp
L R R1
U 1 1 4D57C421
P 2250 1200
F 0 "R1" V 2200 950 50 0000 C CNN
F 1 "200" V 2250 1200 50 0000 C CNN
X 1 2250 1200
X 0 1 1 0
$EndComp
Text GLabel 2550 1400 2 48 Input ~ 0
IO_P1
Text GLabel 2550 1300 2 48 Input ~ 0
IO_P2
Text GLabel 2550 1200 2 48 Input ~ 0
IO_P3
Text GLabel 1950 4700 0 60 Input ~ 0
VCC
Text GLabel 4100 2450 0 60 Input ~ 0
VCC
Text GLabel 4100 1200 0 60 Input ~ 0
VCC
$Comp
L LED D1
U 1 1 4D57C2E9
P 2300 4700
F 0 "D1" H 2300 4800 50 0000 C CNN
F 1 "LED" H 2300 4600 50 0000 C CNN
X 1 2300 4700
X 1 0 0 -1
$EndComp
$Comp
L LED D3
U 1 1 4D57C2DF
P 4400 2450
F 0 "D3" H 4400 2550 50 0000 C CNN
F 1 "LED" H 4400 2350 50 0000 C CNN
X 1 4400 2450
X 1 0 0 -1
$EndComp
$Comp
L LED D2
U 1 1 4D57C2CE
P 4400 1200
F 0 "D2" H 4400 1300 50 0000 C CNN
F 1 "LED" H 4400 1100 50 0000 C CNN
X 1 4400 1200
X 1 0 0 -1
$EndComp
$Comp
L GND #PWR015
U 1 1 4D57C0F6
P 3600 5850
F 0 "#PWR015" H 3600 5850 30 0001 C CNN
F 1 "GND" H 3600 5780 30 0001 C CNN
X 1 3600 5850
X 1 0 0 -1
$EndComp
Text GLabel 5050 5350 2 48 Input ~ 0
IO_S2
$Comp
L R R9
U 1 1 4D57C0ED
P 4700 5350
F 0 "R9" V 4650 5100 50 0000 C CNN
F 1 "200" V 4700 5350 50 0000 C CNN
X 1 4700 5350
X 0 1 1 0
$EndComp
$Comp
L SW_PUSH SW3
U 1 1 4D57C0EC
P 3950 5350
F 0 "SW3" H 4200 5450 50 0000 C CNN
F 1 "SW_PUSH" H 3950 5270 50 0000 C CNN
X 1 3950 5350
X 1 0 0 -1
$EndComp
$Comp
L SW_PUSH SW4
U 1 1 4D57C0EB
P 3950 5600
F 0 "SW4" H 4200 5700 50 0000 C CNN
F 1 "SW_PUSH" H 3950 5520 50 0000 C CNN
X 1 3950 5600
X 1 0 0 -1
$EndComp
$Comp
L R R10
U 1 1 4D57C0EA
P 4700 5600
F 0 "R10" V 4650 5350 50 0000 C CNN
F 1 "200" V 4700 5600 50 0000 C CNN
X 1 4700 5600
X 0 1 1 0
$EndComp
Text GLabel 5050 5600 2 48 Input ~ 0
IO_S1
Text GLabel 5050 5100 2 48 Input ~ 0
IO_S3
$Comp
L R R8
U 1 1 4D57C0DF
P 4700 5100
F 0 "R8" V 4650 4850 50 0000 C CNN
F 1 "200" V 4700 5100 50 0000 C CNN
X 1 4700 5100
X 0 1 1 0
$EndComp
$Comp
L SW_PUSH SW2
U 1 1 4D57C0DE
P 3950 5100
F 0 "SW2" H 4200 5200 50 0000 C CNN
F 1 "SW_PUSH" H 3950 5020 50 0000 C CNN
X 1 3950 5100
X 1 0 0 -1
$EndComp
$Comp
L SW_PUSH SW1
U 1 1 4D57C0B2
P 3950 4850
F 0 "SW1" H 4200 4950 50 0000 C CNN
F 1 "SW_PUSH" H 3950 4770 50 0000 C CNN
X 1 3950 4850
X 1 0 0 -1
$EndComp
$Comp
L GND #PWR016
U 1 1 4D57C03F
P 3750 2050
F 0 "#PWR016" H 3750 2050 30 0001 C CNN
F 1 "GND" H 3750 1980 30 0001 C CNN
X 1 3750 2050
X 1 0 0 -1
$EndComp
$Comp
L SW_PUSH SW6
U 1 1 4D57C019
P 4100 1950
F 0 "SW6" H 4400 2000 50 0000 C CNN
F 1 "SW_PUSH" H 4100 1870 50 0000 C CNN
X 1 4100 1950
X 1 0 0 -1
$EndComp
$Comp
L SW_PUSH SW5
U 1 1 4D57C010
P 4100 1700
F 0 "SW5" H 4350 1800 50 0000 C CNN
F 1 "SW_PUSH" H 4100 1620 50 0000 C CNN
X 1 4100 1700
X 1 0 0 -1
$EndComp
NoConn ~ 8300 2800
NoConn ~ 8300 2600
NoConn ~ 8300 3100
NoConn ~ 8300 3000
$Comp
L CONN_6X2 P3
U 1 1 4D4A7786
P 7850 2850
F 0 "P3" H 7850 3200 60 0000 C CNN
F 1 "CONN_6X2" V 7850 2850 60 0000 C CNN
X 1 7850 2850
X -1 0 0 -1
$EndComp
$Comp
L GND #PWR017
U 1 1 4D455A4C
P 9300 2350
F 0 "#PWR017" H 9300 2350 30 0001 C CNN
F 1 "GND" H 9300 2280 30 0001 C CNN
X 1 9300 2350
X 1 0 0 -1
$EndComp
$Comp
L C C12
U 1 1 4D455A46
P 9300 2050
F 0 "C12" H 9350 2150 50 0000 L CNN
F 1 "1u" H 9350 1950 50 0000 L CNN
X 1 9300 2050
X 1 0 0 -1
$EndComp
Text Notes 7600 4600 0 60 ~ 0
CS5343/4 daughterboard\nincludes all necessary decoupling\ncapacitors!
NoConn ~ 8150 4300
NoConn ~ 9550 4200
$Comp
L GND #PWR018
U 1 1 4D455613
P 10300 2350
F 0 "#PWR018" H 10300 2350 30 0001 C CNN
F 1 "GND" H 10300 2280 30 0001 C CNN
X 1 10300 2350
X 1 0 0 -1
$EndComp
$Comp
L C C17
U 1 1 4D45560E
P 10300 2100
F 0 "C17" H 10350 2200 50 0000 L CNN
F 1 "1u" H 10350 2000 50 0000 L CNN
X 1 10300 2100
X 1 0 0 -1
$EndComp
$Comp
L GND #PWR019
U 1 1 4D455603
P 9900 2200
F 0 "#PWR019" H 9900 2200 30 0001 C CNN
F 1 "GND" H 9900 2130 30 0001 C CNN
X 1 9900 2200
X 1 0 0 -1
$EndComp
$Comp
L LP2950 U5
U 1 1 4D4555FE
P 9900 1900
F 0 "U5" H 10050 1704 60 0000 C CNN
F 1 "LP2950 5V0" H 9900 2100 60 0000 C CNN
X 1 9900 1900
X 1 0 0 -1
$EndComp
Text Notes 1450 6200 0 60 ~ 0
TRANSMITTER FOR THE DIGITAL WIRELESS GUITAR SYSTEM
Text Notes 1550 6350 0 60 ~ 0
This is a public domain schematic diagram\nprepared by Wojciech M. Zabołotny\n(wz...@ise.pw.edu.pl) 23.01.2011
$Comp
L R R4
U 1 1 4D3A051F
P 2650 4450
F 0 "R4" V 2730 4450 50 0000 C CNN
F 1 "3k" V 2650 4450 50 0000 C CNN
X 1 2650 4450
X 1 0 0 -1
$EndComp
NoConn ~ 2000 2350
Text Notes 9600 5550 0 60 ~ 0
Analog input
Text Notes 7850 2000 0 60 ~ 0
Battery connector
$Comp
L CONN_2 P2
U 1 1 4D2C32D2
P 5550 1150
F 0 "P2" V 5500 1150 40 0000 C CNN
F 1 "CONN_2" V 5600 1150 40 0000 C CNN
X 1 5550 1150
X -1 0 0 1
$EndComp
$Comp
L GND #PWR020
U 1 1 4D2C32C3
P 9500 3650
F 0 "#PWR020" H 9500 3650 30 0001 C CNN
F 1 "GND" H 9500 3580 30 0001 C CNN
X 1 9500 3650
X 1 0 0 -1
$EndComp
Text GLabel 10400 3150 2 60 Input ~ 0
VCC3V3
Text GLabel 10450 2500 2 60 Input ~ 0
VCC
$Comp
L GND #PWR021
U 1 1 4D2C3285
P 10300 3650
F 0 "#PWR021" H 10300 3650 30 0001 C CNN
F 1 "GND" H 10300 3580 30 0001 C CNN
X 1 10300 3650
X 1 0 0 -1
$EndComp
$Comp
L GND #PWR022
U 1 1 4D2C3281
P 10300 3000
F 0 "#PWR022" H 10300 3000 30 0001 C CNN
F 1 "GND" H 10300 2930 30 0001 C CNN
X 1 10300 3000
X 1 0 0 -1
$EndComp
$Comp
L C C18
U 1 1 4D2C327E
P 10300 2750
F 0 "C18" H 10350 2850 50 0000 L CNN
F 1 "1u" H 10350 2650 50 0000 L CNN
X 1 10300 2750
X 1 0 0 -1
$EndComp
$Comp
L C C19
U 1 1 4D2C327C
P 10300 3400
F 0 "C19" H 10350 3500 50 0000 L CNN
F 1 "1u" H 10350 3300 50 0000 L CNN
X 1 10300 3400
X 1 0 0 -1
$EndComp
$Comp
L C C15
U 1 1 4D2C3279
P 9500 3400
F 0 "C15" H 9550 3500 50 0000 L CNN
F 1 "1u" H 9550 3300 50 0000 L CNN
X 1 9500 3400
X 1 0 0 -1
$EndComp
$Comp
L GND #PWR023
U 1 1 4D2C324C
P 9900 2850
F 0 "#PWR023" H 9900 2850 30 0001 C CNN
F 1 "GND" H 9900 2780 30 0001 C CNN
X 1 9900 2850
X 1 0 0 -1
$EndComp
$Comp
L GND #PWR024
U 1 1 4D2C3248
P 9900 3500
F 0 "#PWR024" H 9900 3500 30 0001 C CNN
F 1 "GND" H 9900 3430 30 0001 C CNN
X 1 9900 3500
X 1 0 0 -1
$EndComp
$Comp
L LP2950 U7
U 1 1 4D2C3241
P 9900 3200
F 0 "U7" H 10050 3004 60 0000 C CNN
F 1 "LP2950 3V3" H 9900 3400 60 0000 C CNN
X 1 9900 3200
X 1 0 0 -1
$EndComp
$Comp
L LP2950 U6
U 1 1 4D2C3224
P 9900 2550
F 0 "U6" H 10050 2354 60 0000 C CNN
F 1 "LP2950 5V0" H 9900 2750 60 0000 C CNN
X 1 9900 2550
X 1 0 0 -1
$EndComp
$Comp
L R R7
U 1 1 4D2C2B60
P 4700 4850
F 0 "R7" V 4650 4600 50 0000 C CNN
F 1 "200" V 4700 4850 50 0000 C CNN
X 1 4700 4850
X 0 1 1 0
$EndComp
$Comp
L R R6
U 1 1 4D2C26EE
P 4700 2200
F 0 "R6" V 4780 2200 50 0000 C CNN
F 1 "3k" V 4700 2200 50 0000 C CNN
X 1 4700 2200
X 1 0 0 -1
$EndComp
$Comp
L R R11
U 1 1 4D2C269D
P 5050 1950
F 0 "R11" V 5130 1950 50 0000 C CNN
F 1 "200" V 5050 1950 50 0000 C CNN
X 1 5050 1950
X 0 1 1 0
$EndComp
$Comp
L R R12
U 1 1 4D2C2668
P 5150 1700
F 0 "R12" V 5230 1700 50 0000 C CNN
F 1 "200" V 5150 1700 50 0000 C CNN
X 1 5150 1700
X 0 1 1 0
$EndComp
$Comp
L R R5
U 1 1 4D2C25F0
P 4700 1450
F 0 "R5" V 4780 1450 50 0000 C CNN
F 1 "3k" V 4700 1450 50 0000 C CNN
X 1 4700 1450
X 1 0 0 -1
$EndComp
$Comp
L CONN_2 P4
U 1 1 4D2C254D
P 9950 5800
F 0 "P4" V 9900 5800 40 0000 C CNN
F 1 "CONN_2" V 10000 5800 40 0000 C CNN
X 1 9950 5800
X 1 0 0 -1
$EndComp
$Comp
L GND #PWR025
U 1 1 4D2C251D
P 9400 6000
F 0 "#PWR025" H 9400 6000 30 0001 C CNN
F 1 "GND" H 9400 5930 30 0001 C CNN
X 1 9400 6000
X 1 0 0 -1
$EndComp
$Comp
L GND #PWR026
U 1 1 4D2C24FD
P 8600 6450
F 0 "#PWR026" H 8600 6450 30 0001 C CNN
F 1 "GND" H 8600 6380 30 0001 C CNN
X 1 8600 6450
X 1 0 0 -1
$EndComp
$Comp
L R R18
U 1 1 4D2C24F6
P 9100 5700
F 0 "R18" V 9180 5700 50 0000 C CNN
F 1 "3k" V 9100 5700 50 0000 C CNN
X 1 9100 5700
X 0 1 1 0
$EndComp
$Comp
L R R17
U 1 1 4D2C24F1
P 8600 6100
F 0 "R17" V 8680 6100 50 0000 C CNN
F 1 "200k" V 8600 6100 50 0000 C CNN
X 1 8600 6100
X 1 0 0 -1
$EndComp
$Comp
L C C10
U 1 1 4D2C24AA
P 7900 5850
F 0 "C10" H 7950 5950 50 0000 L CNN
F 1 "1u" H 7950 5750 50 0000 L CNN
X 1 7900 5850
X 0 1 1 0
$EndComp
$Comp
L C C9
U 1 1 4D2C246D
P 7900 5550
F 0 "C9" H 7950 5650 50 0000 L CNN
F 1 "1u" H 7950 5450 50 0000 L CNN
X 1 7900 5550
X 0 1 1 0
$EndComp
Text GLabel 5050 4850 2 48 Input ~ 0
IO_S4
Text Notes 7050 2400 0 48 ~ 0
Programming connector compatible\nwith USBasp MV
Text GLabel 6100 4100 2 48 Input ~ 0
IO_S4
Text GLabel 6100 4200 2 48 Input ~ 0
IO_S3
Text GLabel 2950 3900 0 48 Input ~ 0
IO_S2
Text GLabel 2950 4000 0 48 Input ~ 0
IO_S1
Text GLabel 5950 3100 2 48 Input ~ 0
IO_P3
Text GLabel 5950 3200 2 48 Input ~ 0
IO_P2
Text GLabel 5950 3300 2 48 Input ~ 0
IO_P1
$Comp
L GND #PWR027
U 1 1 4D2C1E44
P 7200 3050
F 0 "#PWR027" H 7200 3050 30 0001 C CNN
F 1 "GND" H 7200 2980 30 0001 C CNN
X 1 7200 3050
X 1 0 0 -1
$EndComp
Text GLabel 7400 3200 0 60 Input ~ 0
VCC
Text GLabel 8300 3350 2 60 Input ~ 0
VCC
$Comp
L R R15
U 1 1 4D2C1DA3
P 8150 3600
F 0 "R15" V 8230 3600 50 0000 C CNN
F 1 "10k" V 8150 3600 50 0000 C CNN
X 1 8150 3600
X 1 0 0 -1
$EndComp
$Comp
L R R14
U 1 1 4D2C1D9D
P 7950 3600
F 0 "R14" V 8030 3600 50 0000 C CNN
F 1 "10k" V 7950 3600 50 0000 C CNN
X 1 7950 3600
X 1 0 0 -1
$EndComp
$Comp
L C C8
U 1 1 4D2360D9
P 6700 3300
F 0 "C8" H 6750 3400 50 0000 L CNN
F 1 "1u" H 6750 3200 50 0000 L CNN
X 1 6700 3300
X 1 0 0 -1
$EndComp
$Comp
L GND #PWR028
U 1 1 4D2360D0
P 6700 3550
F 0 "#PWR028" H 6700 3550 30 0001 C CNN
F 1 "GND" H 6700 3480 30 0001 C CNN
X 1 6700 3550
X 1 0 0 -1
$EndComp
Text GLabel 6100 3600 2 48 Input ~ 0
VCC
Text GLabel 2950 3400 0 48 Input ~ 0
VCC
Text GLabel 1750 2950 2 48 Input ~ 0
VCC3V3
Text GLabel 1750 3050 2 48 Input ~ 0
GND
Text GLabel 6100 3400 2 48 Input ~ 0
GND
Text GLabel 2950 3500 0 48 Input ~ 0
GND
$Comp
L GND #PWR029
U 1 1 4D235FF4
P 10100 4250
F 0 "#PWR029" H 10100 4250 30 0001 C CNN
F 1 "GND" H 10100 4180 30 0001 C CNN
X 1 10100 4250
X 1 0 0 -1
$EndComp
$Comp
L CS5343 U4
U 1 1 4D235F4E
P 8850 4100
F 0 "U4" H 8850 3750 60 0000 C CNN
F 1 "CS5343/4 - daughterboard" H 8850 4450 60 0000 C CNN
F 2 "TSSOP-10" H 8750 3650 60 0001 C CNN
F 3 "www.cirrus.com/en/pubs/proDatasheet/CS5343_F3.pdf" H 8900 3550 60 0001 C CNN
X 1 8850 4100
X 1 0 0 -1
$EndComp
$Comp
L GND #PWR030
U 1 1 4D235D32
P 2200 4200
F 0 "#PWR030" H 2200 4200 30 0001 C CNN
F 1 "GND" H 2200 4130 30 0001 C CNN
X 1 2200 4200
X 1 0 0 -1
$EndComp
$Comp
L GND #PWR031
U 1 1 4D235D2D
P 1400 4200
F 0 "#PWR031" H 1400 4200 30 0001 C CNN
F 1 "GND" H 1400 4130 30 0001 C CNN
X 1 1400 4200
X 1 0 0 -1
$EndComp
$Comp
L C C2
U 1 1 4D235D26
P 2200 3900
F 0 "C2" H 2250 4000 50 0000 L CNN
F 1 "22p" H 2250 3800 50 0000 L CNN
X 1 2200 3900
X 1 0 0 -1
$EndComp
$Comp
L C C1
U 1 1 4D235D20
P 1400 3900
F 0 "C1" H 1450 4000 50 0000 L CNN
F 1 "22p" H 1450 3800 50 0000 L CNN
X 1 1400 3900
X 1 0 0 -1
$EndComp
$Comp
L RFM70 U1
U 1 1 4D2358F4
P 1200 2700
F 0 "U1" H 1250 2250 60 0000 C CNN
F 1 "RFM70" H 1250 3150 60 0000 C CNN
X 1 1200 2700
X -1 0 0 -1
$EndComp
$EndSCHEMATC
SHAR_EOF
(set 20 11 02 28 09 20 09 'tx.sch'
eval "${shar_touch}") && \
chmod 0644 'tx.sch'
if test $? -ne 0
then ${echo} "restore of tx.sch failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx.sch': 'MD5 check failed'
) << \SHAR_EOF
59e472f2b0644438ac0a9a5837dbedf4 tx.sch
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx.sch'` -ne 25852 && \
${echo} "restoration warning: size of 'tx.sch' is not 25852"
#!/bin/sh
# This is a shell archive (produced by GNU sharutils 4.9).
# To extract the files from this archive, save it to some FILE, remove
# everything before the `#!/bin/sh' line above, then type `sh FILE'.
#
lock_dir=_sh06830
# Made on 2011-03-01 12:27 CET by <wzab@wzlaphp>.
# Source directory was `/tmp/ee'.
#
# Existing files will *not* be overwritten, unless `-c' is specified.
#
# This shar contains:
# length mode name
# ------ ---------- ------------------------------------------
# 5458 -rw-r--r-- tx/Makefile
# 485 -rw-r--r-- tx/spi_atmega88.h
# 5369 -rw-r--r-- tx/rfm70.c
# 1163 -rw-r--r-- tx/rfm70.h
# 12717 -rw-r--r-- tx/adc.c
# 100 -rw-r--r-- tx/fuses.sh
# 236 -rw-r--r-- tx/abuf.h
# 499 -rw-r--r-- tx/usart_spi_atmega32u2.h
# 2219 -rw-r--r-- tx/usart_spi_atmega88.h
# 55 -rw-r--r-- tx/verify.sh
# 55 -rw-r--r-- tx/progr.sh
# 938 -rw-r--r-- tx/byte_select.h
# 3822 -rw-r--r-- tx/SPI_isr.S
# 433 -rw-r--r-- customize.h
# ============= tx/Makefile ==============
if test ! -d 'tx'; then
mkdir 'tx'
if test $? -eq 0
then ${echo} "x - created directory tx."
else ${echo} "x - failed to create directory tx."
exit 1
fi
fi
if test -f 'tx/Makefile' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx/Makefile (file already exists)"
else
SHAR_EOF
(set 20 11 01 17 08 05 11 'tx/Makefile'
eval "${shar_touch}") && \
chmod 0644 'tx/Makefile'
if test $? -ne 0
then ${echo} "restore of tx/Makefile failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx/Makefile': 'MD5 check failed'
) << \SHAR_EOF
a6eac26d6a74cef290b12abf6fdd9f4a tx/Makefile
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx/Makefile'` -ne 5458 && \
${echo} "restoration warning: size of 'tx/Makefile' is not 5458"
fi
fi
# ============= tx/spi_atmega88.h ==============
if test ! -d 'tx'; then
mkdir 'tx'
if test $? -eq 0
then ${echo} "x - created directory tx."
else ${echo} "x - failed to create directory tx."
exit 1
fi
fi
if test -f 'tx/spi_atmega88.h' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx/spi_atmega88.h (file already exists)"
else
${echo} "x - extracting tx/spi_atmega88.h (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx/spi_atmega88.h' &&
/*
X The code below is published as PUBLIC DOMAIN as Wojciech M. Zabolotny
X ( wzab<at>ise.pw.edu.pl ) 2011.01.11
X No warranty of any kind is provided! Use at your own risk!
*/
X
#ifndef _SPI_ATMEGA88_H_
#define _SPI_ATMEGA88_H_
X #define DDR_SPI_SCK DDRB
X #define PINS_SPI_SCK PINB
X #define PIN_NR_SPI_SCK 5
X
X #define DDR_SPI_SS DDRB
X #define PINS_SPI_SS PINB
X #define PIN_NR_SPI_SS 2
X
X #define DDR_SPI_MOSI DDRB
X #define PINS_SPI_MOSI PINB
X #define PIN_NR_SPI_MOSI 3
#endif
SHAR_EOF
(set 20 11 01 17 08 05 12 'tx/spi_atmega88.h'
eval "${shar_touch}") && \
chmod 0644 'tx/spi_atmega88.h'
if test $? -ne 0
then ${echo} "restore of tx/spi_atmega88.h failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx/spi_atmega88.h': 'MD5 check failed'
) << \SHAR_EOF
bb247db021baae9469174f326b2d921f tx/spi_atmega88.h
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx/spi_atmega88.h'` -ne 485 && \
${echo} "restoration warning: size of 'tx/spi_atmega88.h' is not 485"
fi
fi
# ============= tx/rfm70.c ==============
if test -f 'tx/rfm70.c' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx/rfm70.c (file already exists)"
else
X {4,0x0f}, //up to 15 retransmissions 250�,A5s delay! Was: {4,0xff}, //auto retransmission dalay (4000us),auto retransmission count(15)
SHAR_EOF
(set 20 11 01 19 07 17 06 'tx/rfm70.c'
eval "${shar_touch}") && \
chmod 0644 'tx/rfm70.c'
if test $? -ne 0
then ${echo} "restore of tx/rfm70.c failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx/rfm70.c': 'MD5 check failed'
) << \SHAR_EOF
05916c94d8fc95d3ec1bdfbc3294d973 tx/rfm70.c
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx/rfm70.c'` -ne 5369 && \
${echo} "restoration warning: size of 'tx/rfm70.c' is not 5369"
fi
fi
# ============= tx/rfm70.h ==============
if test -f 'tx/rfm70.h' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx/rfm70.h (file already exists)"
else
${echo} "x - extracting tx/rfm70.h (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx/rfm70.h' &&
#ifndef _RFM70_H_
#define _RFM70_H_
X
#define F_CPU 8000000
X
X
/* Includes: */
#include <ctype.h>
#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/power.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include "usart_spi_atmega88.h"
X
#define PORT_CS PORTD
#define DDR_CS DDRD
#define PIN_CS 3
#define PORT_CE PORTD
#define DDR_CE DDRD
#define PIN_CE 2
SHAR_EOF
(set 20 11 02 23 17 10 06 'tx/rfm70.h'
eval "${shar_touch}") && \
chmod 0644 'tx/rfm70.h'
if test $? -ne 0
then ${echo} "restore of tx/rfm70.h failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx/rfm70.h': 'MD5 check failed'
) << \SHAR_EOF
38160d71504b2a709c2807b07e0cb360 tx/rfm70.h
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx/rfm70.h'` -ne 1163 && \
${echo} "restoration warning: size of 'tx/rfm70.h' is not 1163"
fi
fi
# ============= tx/adc.c ==============
if test -f 'tx/adc.c' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx/adc.c (file already exists)"
else
#define PIN_NR_OVR 5
X
//Switches allocation
#define PORT_SW1 PORTD
#define PINS_SW1 PIND
#define DDR_SW1 DDRD
#define PIN_NR_SW1 7
X
#define PORT_SW2 PORTD
#define PINS_SW2 PIND
#define DDR_SW2 DDRD
#define PIN_NR_SW2 6
X
#define PORT_SW3 PORTB
#define PINS_SW3 PINB
#define DDR_SW3 DDRB
#define PIN_NR_SW3 1
X
#define PORT_SW4 PORTB
#define PINS_SW4 PINB
#define DDR_SW4 DDRB
#define PIN_NR_SW4 4
X
#define PORT_C1 PORTC
#define PINS_C1 PINC
#define DDR_C1 DDRC
#define PIN_NR_C1 4
X
#define PORT_C2 PORTC
#define PINS_C2 PINC
#define DDR_C2 DDRC
#define PIN_NR_C2 3
const uint8_t adc_chan[NR_OF_ADC_CHANS]={0,1,2,5}; //Numbers of scanned channels
X PORT_OVR |= (1<<PIN_NR_OVR);
}
X
ISR(TIMER1_COMPA_vect, ISR_NOBLOCK)
{
X uint8_t tmp = count_led_ovr;
X if(tmp) {
X tmp--;
X if(tmp == 0) {
X PORT_OVR |= (1<<PIN_NR_OVR);
X PORT_OVR &= ~(1<<PIN_NR_OVR);
X count_led_ovr = 200; // 1 second!
X }
X //now in the loop transmit the data received from the CS5343
X packet_nr = 0;
X //We transmit all the information in packets with different numbers
X while(1) {
X uint8_t i;
X if(abuf_overrun) {
X PORT_OVR &= ~(1<<PIN_NR_OVR);
X // We should perform the regular downsampling, but I'm afraid,
X // that AVR's throughput may be too small for implementation
X // of the antialiasing filter
X // Therefore I simple take the mean value of two consecutive samples
X while(abuf_is_empty()) {};
X smp1 = abuf_get();
X while(abuf_is_empty()) {};
X smp1 = (smp1>>1) + (abuf_get()>>1);
X while(abuf_is_empty()) {};
X smp2 = abuf_get();
X while(abuf_is_empty()) {};
X smp2 = (smp2>>1)+(abuf_get()>>1);
SHAR_EOF
(set 20 11 02 23 17 10 06 'tx/adc.c'
eval "${shar_touch}") && \
chmod 0644 'tx/adc.c'
if test $? -ne 0
then ${echo} "restore of tx/adc.c failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx/adc.c': 'MD5 check failed'
) << \SHAR_EOF
b1ba8f46c228609baa4b51037bdde95c tx/adc.c
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx/adc.c'` -ne 12717 && \
${echo} "restoration warning: size of 'tx/adc.c' is not 12717"
fi
fi
# ============= tx/fuses.sh ==============
if test -f 'tx/fuses.sh' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx/fuses.sh (file already exists)"
else
${echo} "x - extracting tx/fuses.sh (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx/fuses.sh' &&
#FUSEH = 0xdd
#FUSEL = 0xbf
avrdude -c usbasp -B 3 -p atmega88 -U hfuse:w:0xdd:m -U lfuse:w:0xbf:m
SHAR_EOF
(set 20 11 02 23 17 10 06 'tx/fuses.sh'
eval "${shar_touch}") && \
chmod 0644 'tx/fuses.sh'
if test $? -ne 0
then ${echo} "restore of tx/fuses.sh failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx/fuses.sh': 'MD5 check failed'
) << \SHAR_EOF
51550291a90481c5f2a2bf0d434a618a tx/fuses.sh
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx/fuses.sh'` -ne 100 && \
${echo} "restoration warning: size of 'tx/fuses.sh' is not 100"
fi
fi
# ============= tx/abuf.h ==============
if test -f 'tx/abuf.h' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx/abuf.h (file already exists)"
else
${echo} "x - extracting tx/abuf.h (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx/abuf.h' &&
/*
X The code below is published as PUBLIC DOMAIN as Wojciech M. Zabolotny
X ( wzab<at>ise.pw.edu.pl ) 2011.01.11
X No warranty of any kind is provided! Use at your own risk!
*/
#define L2_ABUF_LEN 7
#define ABUF_LEN (1<<L2_ABUF_LEN)
X
SHAR_EOF
(set 20 11 01 17 08 05 12 'tx/abuf.h'
eval "${shar_touch}") && \
chmod 0644 'tx/abuf.h'
if test $? -ne 0
then ${echo} "restore of tx/abuf.h failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx/abuf.h': 'MD5 check failed'
) << \SHAR_EOF
63246d38e83672a13ce6bf4aa3095c13 tx/abuf.h
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx/abuf.h'` -ne 236 && \
${echo} "restoration warning: size of 'tx/abuf.h' is not 236"
fi
fi
# ============= tx/usart_spi_atmega32u2.h ==============
if test -f 'tx/usart_spi_atmega32u2.h' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx/usart_spi_atmega32u2.h (file already exists)"
else
${echo} "x - extracting tx/usart_spi_atmega32u2.h (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx/usart_spi_atmega32u2.h' &&
/*
X The code below is published as PUBLIC DOMAIN as Wojciech M. Zabolotny
X ( wzab<at>ise.pw.edu.pl ) 2011.01.11
X No warranty of any kind is provided! Use at your own risk!
*/
X
static inline uint8_t SPI_Transfer(uint8_t c)
{
X /* Wait for empty transmit buffer */
X while ( !( UCSR1A & (1<<UDRE1)) );
X /* Put data into buffer, sends the data */
X UDR1 = c;
X /* Wait for data to be received */
X while ( !(UCSR1A & (1<<RXC1)) );
X /* Get and return received data from buffer */
X return UDR1;
}
SHAR_EOF
(set 20 11 01 17 08 05 12 'tx/usart_spi_atmega32u2.h'
eval "${shar_touch}") && \
chmod 0644 'tx/usart_spi_atmega32u2.h'
if test $? -ne 0
then ${echo} "restore of tx/usart_spi_atmega32u2.h failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx/usart_spi_atmega32u2.h': 'MD5 check failed'
) << \SHAR_EOF
33fb242b7a80c1770eb8e16f5035dc5a tx/usart_spi_atmega32u2.h
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx/usart_spi_atmega32u2.h'` -ne 499 && \
${echo} "restoration warning: size of 'tx/usart_spi_atmega32u2.h' is not 499"
fi
fi
# ============= tx/usart_spi_atmega88.h ==============
if test -f 'tx/usart_spi_atmega88.h' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx/usart_spi_atmega88.h (file already exists)"
else
SHAR_EOF
(set 20 11 01 19 07 17 06 'tx/usart_spi_atmega88.h'
eval "${shar_touch}") && \
chmod 0644 'tx/usart_spi_atmega88.h'
if test $? -ne 0
then ${echo} "restore of tx/usart_spi_atmega88.h failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx/usart_spi_atmega88.h': 'MD5 check failed'
) << \SHAR_EOF
0656e2cb0b9b0650a01b5a68b93869c6 tx/usart_spi_atmega88.h
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx/usart_spi_atmega88.h'` -ne 2219 && \
${echo} "restoration warning: size of 'tx/usart_spi_atmega88.h' is not 2219"
fi
fi
# ============= tx/verify.sh ==============
if test -f 'tx/verify.sh' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx/verify.sh (file already exists)"
else
${echo} "x - extracting tx/verify.sh (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx/verify.sh' &&
avrdude -c usbasp -B 3 -p atmega88 -U flash:v:adc.hex
SHAR_EOF
(set 20 11 01 17 08 05 12 'tx/verify.sh'
eval "${shar_touch}") && \
chmod 0644 'tx/verify.sh'
if test $? -ne 0
then ${echo} "restore of tx/verify.sh failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx/verify.sh': 'MD5 check failed'
) << \SHAR_EOF
a1ca13979281a4e73b8e99b8a69ce006 tx/verify.sh
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx/verify.sh'` -ne 55 && \
${echo} "restoration warning: size of 'tx/verify.sh' is not 55"
fi
fi
# ============= tx/progr.sh ==============
if test -f 'tx/progr.sh' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx/progr.sh (file already exists)"
else
${echo} "x - extracting tx/progr.sh (text)"
sed 's/^X//' << 'SHAR_EOF' > 'tx/progr.sh' &&
avrdude -c usbasp -B 3 -p atmega88 -U flash:w:adc.hex
SHAR_EOF
(set 20 11 01 17 08 05 12 'tx/progr.sh'
eval "${shar_touch}") && \
chmod 0644 'tx/progr.sh'
if test $? -ne 0
then ${echo} "restore of tx/progr.sh failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx/progr.sh': 'MD5 check failed'
) << \SHAR_EOF
fab76d41ec79922029ead04dd713e342 tx/progr.sh
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx/progr.sh'` -ne 55 && \
${echo} "restoration warning: size of 'tx/progr.sh' is not 55"
fi
fi
# ============= tx/byte_select.h ==============
if test -f 'tx/byte_select.h' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx/byte_select.h (file already exists)"
else
SHAR_EOF
(set 20 11 01 17 08 05 12 'tx/byte_select.h'
eval "${shar_touch}") && \
chmod 0644 'tx/byte_select.h'
if test $? -ne 0
then ${echo} "restore of tx/byte_select.h failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx/byte_select.h': 'MD5 check failed'
) << \SHAR_EOF
30101dc3bea8fc2d95bbe9ae3345969f tx/byte_select.h
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx/byte_select.h'` -ne 938 && \
${echo} "restoration warning: size of 'tx/byte_select.h' is not 938"
fi
fi
# ============= tx/SPI_isr.S ==============
if test -f 'tx/SPI_isr.S' && test "$first_param" != -c; then
${echo} "x - SKIPPING tx/SPI_isr.S (file already exists)"
else
SHAR_EOF
(set 20 11 01 19 07 17 06 'tx/SPI_isr.S'
eval "${shar_touch}") && \
chmod 0644 'tx/SPI_isr.S'
if test $? -ne 0
then ${echo} "restore of tx/SPI_isr.S failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'tx/SPI_isr.S': 'MD5 check failed'
) << \SHAR_EOF
5119ee0ffeda4d6dd0225e27dfc32e8b tx/SPI_isr.S
SHAR_EOF
else
test `LC_ALL=C wc -c < 'tx/SPI_isr.S'` -ne 3822 && \
${echo} "restoration warning: size of 'tx/SPI_isr.S' is not 3822"
fi
fi
# ============= customize.h ==============
if test -f 'customize.h' && test "$first_param" != -c; then
${echo} "x - SKIPPING customize.h (file already exists)"
else
${echo} "x - extracting customize.h (text)"
sed 's/^X//' << 'SHAR_EOF' > 'customize.h' &&
/*
X The code below is published as PUBLIC DOMAIN as Wojciech M. Zabolotny
X ( wzab<at>ise.pw.edu.pl ) 2011.01.11
X No warranty of any kind is provided! Use at your own risk!
*/
/*
X When you compile the firmware for another set of Rx/Tx, you should set the set number
X here (0x00-0xff) and the initial channel (0x00-0x52)
X */
#ifndef _CUSTOMIZE_H_
#define _CUSTOMIZE_H_
#define SET_NUMBER 0x21
#define INITIAL_CHANNEL 0x50
#endif
SHAR_EOF
(set 20 11 01 18 07 53 57 'customize.h'
eval "${shar_touch}") && \
chmod 0644 'customize.h'
if test $? -ne 0
then ${echo} "restore of customize.h failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'customize.h': 'MD5 check failed'
) << \SHAR_EOF
e0e5504b213e75d7c2629427abd8d28b customize.h
SHAR_EOF
else
test `LC_ALL=C wc -c < 'customize.h'` -ne 433 && \
${echo} "restoration warning: size of 'customize.h' is not 433"