Table of Contents

D-Link DCS-950G

D-Link wireless IP security camera based on the Cellvision CAS-630.

Supported Versions

Partially supported.

OpenWrt support is possible using the target Infineon/ADMtek ADM5120. There already exists experimental support for identical hardware Cellvision CAS-630W IP camera but it seems there isn't much progress.

OEM source code available at: http://tsd.dlink.com.tw/

→ see Notes

Hardware Highlights

SoC Ram Flash Network USB Serial JTag
Infineon ADM5120@175MHz 32MiB 4MiB 1 No Yes Yes

Manufacturer's site: http://www.dlink.com

Forum: https://forum.openwrt.org/viewtopic.php?id=???

Installation

  1. → TODO

Flash Layout

Please check out the article flash.layout. It contains an example and a couple of explanations.

Offsets Size (KiB) Description
0x000000-0x008000 32 Bootloader
0x008000-0x010000 32 BoardCfg
0x010000-0x020000 64 Linux NVFS
0x020000-0x030000 64 Linux NVFS2
0x030000-0x400000 3904 Kernel Image

DCS-950G-flash_backup_OEM.tar.gz

OEM easy installation

You have two options for flashing a firmware. It's very recommendable to have the serial port ready for using it. If something goes wrong you may brick your device.

Never use the option ( c ) if you don't know what are you doing!

Failsafe mode

failsafe_and_factory_reset

Buttons

hardware.button on howto use and configure the hardware button(s).

The DCS-950G has one button. It is the Reset button at the back of the device:

BUTTON Event GPIO active
Reset reset 0 low

LEDs

Label color GPIO active
Power orange n/a
Link green 1 low

Hardware

Info

Instruction set MIPS Little Endian
Vendor Infineon
bootloader ADM Bootloader
System-On-Chip ADM5120
CPU @Frq MIPS 4Kc V0.11 @175MHz
Flash size 4 MiB
Flash Chip :?:
RAM size 32 MiB
RAM Chip :?: SDR-133
Wireless Ralink RT2560F 802.11b/g (PCI interface)
Antenna 1x detachable
Ethernet 1x 10/100Base-TX (SoC)
USB USB SoC → onboard Video Encoder
Video Encoder WIS Go7007SB MPEG-4 encoder → Linux Driver
Power Adapter 5V DC 2.5A / JTA0302E-E
Serial Yes
JTAG Yes

Photos

Model Number: HW Ver. A4

Opening the case

Note: This will void your warranty!

Serial

port.serial general information about the serial port, serial port cable, etc.

How to connect to the Serial Port of this specific device:

JTAG

port.jtag general information about the JTAG port, JTAG cable, etc.

How to connect to the JTAG Port of this specific device:

Looks like J3 matches to a 14 pin JTAG header (not verified):

nTRST 1 2 GND
TDI 3 4 GND
TDO 5 6 GND
TMS 7 8 GND
TCK 9 10 GND
nSRST 11 12 n/a
n/a 13 14 Vcc

Debricking

generic.debrick

Bootloader Mods

  1. you could read about bootloader in general

Hardware mods

  1. as a beginner, you really should inform yourself about soldering in general and then obtain some practical experience!

Bootlogs

OEM bootlog

ADM5120 Boot (V1.04) LINUX/5120 started... CPU revision is: 0001800b Primary instruction cache 8kb, linesize 16 bytes (2 ways) Primary data cache 8kb, linesize 16 bytes (2 ways) Linux version 2.4.18-5120-05 (amy@SWTEST2) v1.00 #462 �T 11�� 28 15:47:09 CST 2007 am5120_setup() starts. System has PCI BIOS Determined physical RAM map: memory: 01b0f000 @ 004f1000 (usable) Initial ramdisk at: 0x801cd000 (3103645 bytes) On node 0 totalpages: 8192 zone(0): 4096 pages. zone(1): 4096 pages. zone(2): 0 pages. Kernel command line: root=/dev/ram0 console=ttyS0 CPU clock: 175MHz Calibrating delay loop... 174.48 BogoMIPS Memory: 27184k/27708k available (1668k kernel code, 524k reserved, 3128k data, 56k init, 0k highmem) Dentry-cache hash table entries: 4096 (order: 3, 32768 bytes) Inode-cache hash table entries: 2048 (order: 2, 16384 bytes) Mount-cache hash table entries: 512 (order: 0, 4096 bytes) Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes) Page-cache hash table entries: 8192 (order: 3, 32768 bytes) Checking for 'wait' instruction... available. POSIX conformance testing by UNIFIX Autoconfig PCI channel 0x801cc9c8 Scanning bus 00, I/O 0x11500000:0x115ffff0, Mem 0x11400000:0x11500000 00:00.0 Class 0600: 1317:5120 Mem unavailable -- skipping I/O unavailable -- skipping 00:02.0 Class 0280: 1814:0201 (rev 01) Mem at 0x11400000 [size=0x2000] fixup resource fixup host controller am5120 fix up fixup resource pcibios_fixup fixup IRQ PCI Interrupt Line = 0x0 PCI Interrupt Pin = 0x0 PCI Interrupt Line = 0x6 PCI Interrupt Pin = 0x1 Linux NET4.0 for Linux 2.4 Based upon Swansea University Computer Society NET3.039 Initializing RT netlink socket Starting kswapd pty: 256 Unix98 ptys configured block: 64 slots per queue, batch=16 RAMDISK driver initialized: 16 RAM disks of 8192K size 1024 blocksize loop: loaded (max 8 devices) ADM5120 Switch Module Init PPP generic driver version 2.4.1 PPP Deflate Compression module registered PPP BSD Compression module registered AM5120 NOR flash device: 400000 at 1fc00000 AM5120 NOR flash device: Found 1 x16 devices at 0x0 in 16-bit mode Amd/Fujitsu Extended Query Table at 0x0040 number of CFI chips: 1 cfi_cmdset_0002: Disabling fast programming due to code brokenness. Creating 4 MTD partitions on "AM5120 NOR flash device": 0x00008000-0x00010000 : "BoardCfg" 0x00010000-0x00020000 : "Linux NVFS" 0x00020000-0x00030000 : "Linux NVFS2" 0x00030000-0x00400000 : "Kernel Image" AM5120 NOR flash device initialized usb.c: registered new driver usbdevfs usb.c: registered new driver hub Start Init AHCI_INIT usb.c: new USB bus registered, assigned bus number 1 hub.c: USB hub found hub.c: 2 ports detected Device is hub/wis camera, so skip call policy(devnum=1)!!! NET4: Linux TCP/IP 1.0 for NET4.0 IP Protocols: ICMP, UDP, TCP IP: routing cache hash table of 512 buckets, 4Kbytes TCP: Hash tables configured (established 2048 bind 2048) NET4: Ethernet Bridge 008 for NET4.0 RAMDISK: Compressed image found at block 0 Freeing initrd memory: 3030k freed EXT2-fs warning: maximal mount count reached, running e2fsck is recommended VFS: Mounted root (ext2 filesystem). Freeing prom memory: 0kb freed Freeing unused kernel memory: 56k freed hub.c: USB new device connect on bus1/3, assigned device number 2 init started: BusyBox v1.00-pre1 (2006.04.21-07:46+0000) multi-call binary usb.c: USB device 2 (vend/prod 0xeb1/0x7007) is not claimed by any active driver. Device is hub/wis camera, so skip call policy(devnum=2)!!! Check MTD block device ... MTDC: Mount MTD1 done. MTDC: Mount MTD2 done. MTDC: Backup files from MTD1 to MTD2. countryCode = 0 beginChannel = 1 endChannel = 11 cp /sys/mtd1/CountryRegion.conf /sys/mtd2/CountryRegion.conf ** check copy default file ** copy default config files version is the same ** copy config files cp: /sys/mtd1/triggerURL: No such file or directory ** umount mtd1 ** mount mtd2 ** copy default config files to mtd2 ** umount mtd2 Using /sys/crfs/wireless/rt2500.o ra0: at 0x11400000, VA 0xb1400000, IRQ 6. ** set loopback interface ra0: RT2500_open() irq 6. MAC = 00:19:5b:8c:7f:39 pAdapter->PortCfg.StaWithEtherBridge.Enable = FALSE br0: port 2(ra0) entering learning state br0: port 1(adm0) entering learning state ** exec modules br0 HWaddr 00:19:5B:8C:7F:39 get last 2 items from MAC = 7F 39 IP Now = 169.254.127.57 target = 169.254.127.57 ARPING to 169.254.127.57 from 0.0.0.0 via br0 Sent 2 probes (2 broadcast(s)) Received 0 reply ARPING return value = 0 ifconfig: set interface br0:0 to 169.254.127.57 check button version v1.08 2005.12.26 ** copy fix_setting.txt for sensor Sensor Type: CMOS, MI0360 ** insert wis driver module Using /etc/wis/wis_sensor.o Using /etc/wis/wisgo7007sb.o usb.c: registered new driver wisgo <WIS DRV> InitBoard <WIS DRV> sensor type 1, audio 1 download pipe size: 30784 %%%% download return: 0 download pipe size: 72192 %%%% download return: 0 download pipe size: 64 download return: 0 <WIS DRV> (1) rt 0, regData 0x823a <WIS DRV> MI0360ReadDeviceAddr 0x91 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 30784 %%%% download return: 0 ** go-server ** execute rc.init.sh Aragorn IPV Srever version : v1.04.20071031 ipv server port = 5100 **************************************** * Cellvision go-server v1.37.0402.2007 * **************************************** pServer->FlickerType 1 ----------- go-server setting ---------- gop_size = 30 width = 640 height = 480 h_scale_enb = 0 v_scale_enb = 0 target_bitrate = 1000000 peak_bitrate = 1200000 frame_rate = 15000 ---------------------------------------- Setting hostname .... DCS-950G Total free freme set : 20 Total free fremes : 600 Board Revision number : 0x0200 Board Name : Aragorn Board Capability : 0x00000003 Source Width : 640 Source Height : 480 br0: port 2(ra0) entering forwarding state br0: topology change detected, propagating br0: port 1(adm0) entering forwarding state br0: topology change detected, propagating DHCP : 0 PPPoE: 0 <WIS DRV> GetSensorConfig: sensor type 1, audio 1 <WIS DRV> OnStartCapture download pipe size: 74496 %%%% kill: Usage: kill [-s sigspec | -signum | -sigspec] [pid | job]... or kill -l [exitstatus] Set Timezone=2 TimeZone = (GMT+02:00) Israel zoneoffset = GMT-02:00 1.Set Date & time ...(command: /bin/queryTimeServer ntp1.dlink.com &) download return: 0 <4>MI IO_I2CWRITEREGISTER MI0360WriteDeviceAddr=90 MI IO_I2CWRITEREGISTER MI0360WriteDeviceAddr=90 Cellvision UPnPAV Media Server v1.03.0629.2006. SetMicronImage 1: r = 0download pipe size: 64 download return: 0 Cellvision UPnPAV Media Server v1.03.0629.2006. <go-server> ReadMicronRegister status 0x1, value 0x4 <go-server> ReadMicronRegister return 0x0 <4>MI IO_I2CWRITEREGISTER MI0360WriteDeviceAddr=90 MI IO_I2CWRITEREGISTER MI0360WriteDeviceAddr=90 IP=192.168.5.201:0 IP=169.254.127.57:1 IP=192.168.5.201:0 IP=169.254.127.57:1 SetMicronImage 2: r = 0, value = 0xd000download pipe size: 64 download return: 0 UPnPAV: 640x480-15000 AVI_FILE_HEADER struct size 0x800 <go-server> ReadMicronRegister status 0x20, value 0xd000 <4>MI IO_I2CWRITEREGISTER MI0360WriteDeviceAddr=90 MI IO_I2CWRITEREGISTER MI0360WriteDeviceAddr=90 <go-server> ReadMicronRegister return 0x0 UPnPAV: 640x480-15000 AVI_FILE_HEADER struct size 0x800 SetMicronImage 3: r = 0download pipe size: 64 download return: 0 <go-server> ReadMicronRegister status 0x1, value 0x1 <go-server> ReadMicronRegister return 0x0 <4>MI IO_I2CWRITEREGISTER MI0360WriteDeviceAddr=90 MI IO_I2CWRITEREGISTER MI0360WriteDeviceAddr=90 MicronNightShot Disable : r = 0download pipe size: 64 download return: 0 <go-server> ReadMicronRegister status 0x37, value 0x61 <4>MI IO_I2CWRITEREGISTER MI0360WriteDeviceAddr=90 MI IO_I2CWRITEREGISTER MI0360WriteDeviceAddr=90 <go-server> ReadMicronRegister return 0x0 SetMicronFlicker 1: r = 0download pipe size: 64 download return: 0 <go-server> ReadMicronRegister status 0x37, value 0x61 <go-server> ReadMicronRegister return 0x0 <4>MI IO_I2CWRITEREGISTER MI0360WriteDeviceAddr=90 MI IO_I2CWRITEREGISTER MI0360WriteDeviceAddr=90 SetMicronFlicker 2: r = 0download pipe size: 64 download return: 0 <go-server> ReadMicronRegister status 0x5b, value 0x1 <go-server> ReadMicronRegister return 0x0 StartDevice maxx=0, maxy=0 download pipe size: 64 download return: 0 MDSetEnable SET_SUCCESS(Init) MDInitRegion: MDSetRegion 1 (324, 295)-(606, 461)maxx=40, maxy=30 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 MDSet: RegionMask 0xe MDInitRegion: MDSetRegion 2 (373, 59)-(610, 195) maxx=40, maxy=30 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 MDSet: RegionMask 0xe MDInitRegion: MDSetRegion 3 (347, 171)-(607, 308) maxx=40, maxy=30 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 download pipe size: 64 download return: 0 MDSet: RegionMask 0xe MDInitRegion: successful StartTime: 1970/01/01 02:00:32 Running audio_work_thread Enter avi_file_save_thread Enter mail_thread Enter iMode_thread Enter audio_send_thread Enter Check go Server ok. 1.Set Date & time ...(command: /bin/queryTimeServer ntp1.dlink.com &) Result = 1 1.Set Date & time ...(command: /bin/queryTimeServer ntp.dlink.com.tw &) Result = 1 1.Set Date & time ...(command: /bin/queryTimeServer ntp1.dlink.com &) Result = 1 1.Set Date & time ...(command: /bin/queryTimeServer ntp.dlink.com.tw &) Result = 1 Jan 1 02:00:50 crond[251]: /sbin/crond 2.3.2 dillon, started, log level 8 sib.conf <wireless>SSID [fumarel] <wireless>Channel [11] <wireless>Auth [1] <wireless>Security_mode [1] <wireless>Encry_mode [2] <wireless>Default_key [1] <wireless>PSK [] cat: /var/run/pppoe.conf-adsl.pid: No such file or directory kill: Usage: kill [-s sigspec | -signum | -sigspec] [pid | job]... or kill -l [exitstatus] cat: /var/run/pppoe.conf-adsl.pid.pppoe: No such file or directory kill: Usage: kill [-s sigspec | -signum | -sigspec] [pid | job]... or kill -l [exitstatus] SIOCADDRT: File exists * Running chkwebs vMO Send Mail Version 1.0.0_20040804 * /web/sib2.conf:53: no such option 'CF-UPNPAV-ENABLE' run check~~~ +----------------------------------------+ | Wecome to Linux/MIPS Cellvision Systems| +----------------------------------------+ 2.00 1.72.1128.2007(2.00g) Please press Enter to activate this console. Jun 24 10:26:08 crond[315]: /sbin/crond 2.3.2 dillon, started, log level 8 Jun 24 10:26:19 crond[367]: /sbin/crond 2.3.2 dillon, started, log level 8


OpenWrt bootlog

OpenWrt RAMDISK firmware, just for testing.

ADM Bootloader (v0.04.01 20040216) ================================== (a) Download vmlinuz to flash ... (b) Download vmlinuz to sdram (for debug) ... (c) Update bootloader ... (e) Exit Please enter your key : b Downloading.........\0x15\0x15\0x15\0x15\0x15\0x15\0x15\0x15\0x15\0x15PASS decompress kernel image ... boot linux ... LZMA loader for CAS-630, Copyright (C) 2007-2008 OpenWrt.org decompressing kernel... done! launching kernel... [ 0.000000] Linux version 3.3.8 (dani@tool) (gcc version 4.6.3 20120201 (prerelease) (Linaro GCC 4.6-2012.02) ) #7 Tue Apr 15 14:16:15 CEST 2014 [ 0.000000] bootconsole [early0] enabled [ 0.000000] CPU revision is: 0001800b (MIPS 4Kc) [ 0.000000] SoC : ADM5120 rev 8, running at 175.000 MHz [ 0.000000] Bootdev : NOR flash [ 0.000000] Prom : Generic [ 0.000000] Determined physical RAM map: [ 0.000000] memory: 02000000 @ 00000000 (usable) [ 0.000000] Initrd not found or empty - disabling initrd [ 0.000000] Zone PFN ranges: [ 0.000000] Normal 0x00000000 -> 0x00002000 [ 0.000000] Movable zone start PFN for each node [ 0.000000] Early memory PFN ranges [ 0.000000] 0: 0x00000000 -> 0x00002000 [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 8128 [ 0.000000] Kernel command line: console=ttyS0,115200 rootfstype=squashfs,jffs2 [ 0.000000] PID hash table entries: 128 (order: -3, 512 bytes) [ 0.000000] Dentry cache hash table entries: 4096 (order: 2, 16384 bytes) [ 0.000000] Inode-cache hash table entries: 2048 (order: 1, 8192 bytes) [ 0.000000] Primary instruction cache 8kB, VIPT, 2-way, linesize 16 bytes. [ 0.000000] Primary data cache 8kB, 2-way, VIPT, no aliases, linesize 16 bytes [ 0.000000] Memory: 29220k/32768k available (1973k kernel code, 3548k reserved, 335k data, 704k init, 0k highmem) [ 0.000000] NR_IRQS:24 [ 0.000000] Calibrating delay loop... 173.05 BogoMIPS (lpj=346112) [ 0.040000] pid_max: default: 32768 minimum: 301 [ 0.044000] Mount-cache hash table entries: 512 [ 0.056000] NET: Registered protocol family 16 [ 0.072000] gpiochip_add: registered GPIOs 0 to 7 on device: adm5120 gpio0 [ 0.076000] gpiochip_add: registered GPIOs 8 to 22 on device: adm5120 gpio1 [ 0.080000] MIPS: machine is Cellvision CAS-630/630W [ 0.088000] registering PCI controller with io_map_base unset [ 0.132000] bio: create slab <bio-0> at 0 [ 0.144000] PCI host bridge to bus 0000:00 [ 0.148000] pci_bus 0000:00: root bus resource [mem 0x11400000-0x114fffff] [ 0.152000] pci_bus 0000:00: root bus resource [io 0x11500000-0x115fffef] [ 0.160000] pci 0000:00:02.0: BAR 0: assigned [mem 0x11400000-0x11401fff] [ 0.164000] PCI: pci_irq_map is not initialized [ 0.172000] Switching to clocksource MIPS [ 0.196000] NET: Registered protocol family 2 [ 0.204000] IP route cache hash table entries: 1024 (order: 0, 4096 bytes) [ 0.212000] TCP established hash table entries: 1024 (order: 1, 8192 bytes) [ 0.220000] TCP bind hash table entries: 1024 (order: 0, 4096 bytes) [ 0.228000] TCP: Hash tables configured (established 1024 bind 1024) [ 0.232000] TCP reno registered [ 0.236000] UDP hash table entries: 256 (order: 0, 4096 bytes) [ 0.244000] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes) [ 0.252000] NET: Registered protocol family 1 [ 3.400000] squashfs: version 4.0 (2009/01/31) Phillip Lougher [ 3.408000] JFFS2 version 2.2 (NAND) (SUMMARY) (LZMA) (RTIME) (CMODE_PRIORITY) (c) 2001-2006 Red Hat, Inc. [ 3.420000] msgmni has been set to 57 [ 3.424000] io scheduler noop registered [ 3.428000] io scheduler deadline registered (default) [ 4.452000] Serial: AMBA driver [ 4.456000] apb:uart0: ttyS0 at MMIO 0x12600000 (irq = 9) is a AMBA [ 4.464000] console [ttyS0] enabled, bootconsole disabled [ 4.464000] console [ttyS0] enabled, bootconsole disabled [ 4.476000] apb:uart1: ttyS1 at MMIO 0x12800000 (irq = 10) is a AMBA [ 4.496000] adm5120-flash.0: probing at 0x1FC00000, size:4096KiB, width:16 bits [ 4.504000] adm5120-flash.0: Found 1 x16 devices at 0x0 in 16-bit bank. Manufacturer ID 0x000001 Chip ID 0x001a00 [ 4.516000] Amd/Fujitsu Extended Query Table at 0x0040 [ 4.520000] Amd/Fujitsu Extended Query version 1.3. [ 4.524000] number of CFI chips: 1 [ 4.528000] adm5120-flash.0: found at 0x1FC00000, size:4096KiB, width:16 bits [ 4.536000] Creating 5 MTD partitions on "adm5120-flash.0": [ 4.544000] 0x000000000000-0x000000008000 : "admboot" [ 4.560000] 0x000000008000-0x000000010000 : "config" [ 4.576000] 0x000000010000-0x000000020000 : "nvfs1" [ 4.592000] 0x000000020000-0x000000030000 : "nvfs2" [ 4.608000] 0x000000030000-0x000000400000 : "firmware" [ 4.628000] ADM5120 built-in ethernet switch driver version 0.1.1 [ 4.672000] adm5120_wdt: Watchdog Timer version 0.1 [ 4.680000] TCP cubic registered [ 4.684000] NET: Registered protocol family 17 [ 4.688000] 8021q: 802.1Q VLAN Support v1.8 [ 4.696000] trxsplit: searching TRX header in 'admboot' [ 4.700000] trxsplit: searching TRX header in 'config' [ 4.708000] trxsplit: searching TRX header in 'nvfs1' [ 4.712000] trxsplit: searching TRX header in 'nvfs2' [ 4.716000] trxsplit: searching TRX header in 'firmware' [ 4.732000] Please be patient, while OpenWrt loads ... [ 4.744000] Freeing unused kernel memory: 704k freed [ 10.948000] Button Hotplug driver version 0.4.1 - preinit - Press the [f] key and hit [enter] to enter failsafe mode - regular preinit - - init - Please press Enter to activate this console. [ 22.296000] device eth0 entered promiscuous mode [ 22.308000] br-lan: port 1(eth0) entered forwarding state [ 22.312000] br-lan: port 1(eth0) entered forwarding state [ 24.316000] br-lan: port 1(eth0) entered forwarding state BusyBox v1.19.4 (2014-04-15 12:30:11 CEST) built-in shell (ash) Enter 'help' for a list of built-in commands. _______ ________ __ | |.-----.-----.-----.| | | |.----.| |_ | - || _ | -__| || | | || _|| _| |_______|| __|_____|__|__||________||__| |____| |__| W I R E L E S S F R E E D O M ----------------------------------------------------- ATTITUDE ADJUSTMENT (Attitude Adjustment, r36422) ----------------------------------------------------- * 1/4 oz Vodka Pour all ingredients into mixing * 1/4 oz Gin tin with ice, strain into glass. * 1/4 oz Amaretto * 1/4 oz Triple sec * 1/4 oz Peach schnapps * 1/4 oz Sour mix * 1 splash Cranberry juice ----------------------------------------------------- root@OpenWrt:/#


Notes

Tags

How to add tags