2012-08-08 00:18 LunaVorax has quit [Remote host closed the connection] 2012-08-08 00:19 Ayla has quit [Quit: dodo] 2012-08-08 00:46 guanucoluis has joined #qi-hardware 2012-08-08 01:03 xiangfu has joined #qi-hardware 2012-08-08 01:22 rodgort has quit [Quit: ERC Version 5.3 (IRC client for Emacs)] 2012-08-08 01:24 rodgort has joined #qi-hardware 2012-08-08 01:58 guanucoluis has quit [Ping timeout: 245 seconds] 2012-08-08 02:05 panda|x201 has joined #qi-hardware 2012-08-08 02:30 xwalk has quit [Quit: Leaving] 2012-08-08 02:45 rejon has joined #qi-hardware 2012-08-08 02:47 emeb has quit [Ping timeout: 252 seconds] 2012-08-08 02:50 rejon has quit [Remote host closed the connection] 2012-08-08 02:59 compcube has quit [Quit: Leaving] 2012-08-08 03:05 wpwrak: had you survey other people about the same wine effect from that brand? :-) 2012-08-08 03:10 heberth has joined #qi-hardware 2012-08-08 03:13 only on smaller quantities. still need to do a more extensive study for my paper in Nature. 2012-08-08 03:18 panda|x201 has quit [Ping timeout: 240 seconds] 2012-08-08 03:20 rejon has joined #qi-hardware 2012-08-08 03:40 heberth has quit [Quit: leaving] 2012-08-08 03:53 emeb has joined #qi-hardware 2012-08-08 04:33 emeb has quit [Quit: Leaving.] 2012-08-08 04:33 emeb1 has joined #qi-hardware 2012-08-08 04:35 bye bye ansi c, welcome posix threads and semaphores 2012-08-08 04:36 hope this make code more portable between linux and rtems.. 2012-08-08 04:37 hmm 2012-08-08 04:37 how's ansi c in conflict with posix? 2012-08-08 04:38 aah wait, threads 2012-08-08 04:39 I seem to recall sth from 5+ years ago 2012-08-08 04:39 along lightweight threads or sth 2012-08-08 04:50 GeorgeH is now known as GeorgeH-Away 2012-08-08 05:32 qwebirc63101 has joined #qi-hardware 2012-08-08 05:32 qwebirc63101 is now known as rjeffries 2012-08-08 05:33 these speakers are rather cool. and open. http://web.media.mit.edu/~mellis/speakers/ 2012-08-08 05:35 rjeffries has quit [Client Quit] 2012-08-08 05:49 emeb1 has left #qi-hardware [#qi-hardware] 2012-08-08 05:56 LunaVorax has joined #qi-hardware 2012-08-08 05:59 Hello 2012-08-08 06:06 xwalk has joined #qi-hardware 2012-08-08 06:15 jekhor has joined #qi-hardware 2012-08-08 06:36 kilae has joined #qi-hardware 2012-08-08 06:40 @%$#*! when a usb low-speed device tries to register bulk EPs (which for some obscure reason isn't allowed by the usb spec), linux helpfully converts them to interrupt. this is of course breaks any use of them as bulk with protocols that do require bulk and that won't be satisfied with interrupt. such as mass storage :-( 2012-08-08 06:44 so because of linux enforcing this arbitrary restriction in the usb spec, one can't implement mass storage with a low-speed device :-( 2012-08-08 06:45 does it work on windows? 2012-08-08 06:46 or any other OS 2012-08-08 06:47 i don't have any windows around here, but someone who made such a device claimed "it usually works". and his files are full of \r\n. so i would suspect he tried it there. 2012-08-08 06:50 of course, if it only doens't work on linux, that would be tolerable. on linux it's easy to use some other mechanism. 2012-08-08 07:20 LunaVorax has quit [Ping timeout: 246 seconds] 2012-08-08 07:25 LunaVorax has joined #qi-hardware 2012-08-08 08:06 jekhor has quit [Ping timeout: 248 seconds] 2012-08-08 08:53 LunaVorax has quit [Quit: Quitte] 2012-08-08 09:51 rejon has quit [Ping timeout: 240 seconds] 2012-08-08 09:51 wpwrak: iirc, the gp2x offers a mass storage device at usb 1.1 2012-08-08 09:52 1.1 == low speed? or that is 'full' speed? 2012-08-08 09:58 pang_ is now known as pang 2012-08-08 10:19 jurting has quit [Ping timeout: 265 seconds] 2012-08-08 10:21 jurting has joined #qi-hardware 2012-08-08 10:35 Ayla has joined #qi-hardware 2012-08-08 10:36 kuribas has joined #qi-hardware 2012-08-08 10:59 viric: I think 1.1 offered both full and low speed 2012-08-08 11:00 low speed for stuff like mouse and keyboards and full speed for storage 2012-08-08 11:00 xwalk has quit [Read error: Operation timed out] 2012-08-08 11:09 kuribas has quit [Quit: ERC Version 5.3 (IRC client for Emacs)] 2012-08-08 11:14 kuribas has joined #qi-hardware 2012-08-08 11:28 kuribas has quit [Remote host closed the connection] 2012-08-08 11:38 larsc: ah ok 2012-08-08 11:48 yes, 1.1 = { low, full }. 2.0 = { low, full, high }. that's why you also see full-speed "USB 2.0" devices. 2012-08-08 11:57 wpwrak: erm, sorry, you are wrong afaik 2012-08-08 11:58 the linux behavior actually _allows_ you to use bulk endpoints on low-speed devices, which are indeed prohibited by usb spec 2012-08-08 11:58 I know that because I've played with V-USB, a software-defined USB device stack for ATmega processors 2012-08-08 11:58 and it obviously only offers low-speed 1.1 2012-08-08 11:59 with these software-defined devices, bulk endpoints actually work in Linux and sometimes work on other OSes 2012-08-08 11:59 yes, i'm also experimenting with v-usb 2012-08-08 11:59 did you try mass storage ? 2012-08-08 12:01 in fact, that hack was added almost specifically for v-usb, because otherwise bulk polling was overloading the device. it's not there to break v-usb, it's there to fix it 2012-08-08 12:01 iirc yes 2012-08-08 12:02 that was some years ago, through 2012-08-08 12:05 what i see is this: drivers/usb/core/config.c:usb_parse_endpoint converts all usb_endpoint_xfer_bulk() endpoints on low-speed devices to USB_ENDPOINT_XFER_INT 2012-08-08 12:05 usb_endpoint_xfer_bulk() is the test wrapper, from include/linux/usb/ch9.h 2012-08-08 12:06 xwalk has joined #qi-hardware 2012-08-08 12:06 then drivers/usb/storage/usb.c:get_pipes searches the list of EPs for bulk EPs and remembers them. it also remembers an usb_endpoint_is_int_in() EP, if it fonds one (for a different protocol variant) 2012-08-08 12:07 since all the bulk EPs have become interrupt now, it then fails the sanity check right after the scan, and returns with -EIO 2012-08-08 12:07 hm 2012-08-08 12:07 could you just maybe try with .26 kernel? 2012-08-08 12:08 because, as I've been saying, that was quite a while ago and an unrelated change to the USB subsystem might have broken it 2012-08-08 12:08 i looked at 2.6.36, and it looks the same there 2012-08-08 12:08 I'm pretty sure this used to work, but as this is quite an obscure feature 2012-08-08 12:09 2.6.8.1 doesn't seem to have the "correction" 2012-08-08 12:10 too old :) 2012-08-08 12:10 I used 2.6.26 these times 2012-08-08 12:10 or maybe .22 2012-08-08 12:11 commit 60aac1ec added it 2012-08-08 12:13 can't look at gitweb right now, sorry 2012-08-08 12:13 hmm, when was that ? i don't have any kernel git repo around at the moment 2012-08-08 12:13 I'll be back after a few hours 2012-08-08 12:14 ah wait, there's one 2012-08-08 12:14 2007 2012-08-08 12:14 Fri Jun 8 15:25:02 2007 -0400 2012-08-08 12:19 guanucoluis has joined #qi-hardware 2012-08-08 12:24 jekhor has joined #qi-hardware 2012-08-08 12:28 well, i'll return to this issue. then i'll disable the "fix" and see if this makes things work. that way, i could make something that can be tested with legacy operating systems. 2012-08-08 12:30 the objective of the whole exercise is to find a way to put data (a few kB) on a USB device without needing drivers for windows and such. seems that storage is the only way to do this. 2012-08-08 12:47 ah this last sentence clarified a lot 2012-08-08 12:49 heh, thought it might :) 2012-08-08 12:51 can't you have something like a keyboard, and send using the status leds ? :) 2012-08-08 12:51 capslock, numlock, ... 2012-08-08 12:51 it'd be nice to see the bandwidth for that 2012-08-08 12:52 maybe. but then i'd need a special application that toggles the leds. 2012-08-08 12:52 and it may toggle the leds in all computer keyboards hehe 2012-08-08 12:52 yeah, that too :) 2012-08-08 12:53 well, one option would be DFU. that seems to be taken care of, even though the installation seems to be a bit on the ugly side. 2012-08-08 12:54 dfu? 2012-08-08 12:54 of course, once we accept libusb in the mix, anything goes 2012-08-08 12:54 a tftp-like firmware download protocol 2012-08-08 12:54 pretty popular these days 2012-08-08 12:55 the openmoko phones had it, idbg has it, atusb has it, ... 2012-08-08 12:55 the only risk is that it finds some other device and sends your firmware there. now if that other device has no sanity checks, ... 2012-08-08 12:56 e.g., seems many BT devices are dfu-upgradeable 2012-08-08 13:06 rejon has joined #qi-hardware 2012-08-08 13:07 kuribas has joined #qi-hardware 2012-08-08 13:47 GNUtoo has joined #qi-hardware 2012-08-08 14:04 emeb has joined #qi-hardware 2012-08-08 14:13 DocScrutinizer has quit [Disconnected by services] 2012-08-08 14:13 DocScrutinizer has joined #qi-hardware 2012-08-08 14:13 DocScrutinizer05 has quit [Disconnected by services] 2012-08-08 14:13 DocScrutinizer05 has joined #qi-hardware 2012-08-08 14:21 wpwrak: WRONG 2012-08-08 14:21 you tried with a recent kernel and it worked ? 2012-08-08 14:22 the easiest way of putting something on a low-speed device while writing as fewer drivers as possible isn't mass storage 2012-08-08 14:22 it's HID 2012-08-08 14:22 quite un-obviously 2012-08-08 14:22 ah 2012-08-08 14:22 HID doesn't need a kernel driver on linux nor windows 2012-08-08 14:22 yes, but you still need an application that mangles HID 2012-08-08 14:22 and it works perfectly with 1.1 devs 2012-08-08 14:22 yep 2012-08-08 14:22 but afaik windows won't recognize such an UMS device at all 2012-08-08 14:23 so even if it'll work with that hack or without it, it'll only be restricted to linuxen 2012-08-08 14:23 (ls-ums & windows) would need testing to verify 2012-08-08 14:24 well, plan B is "some other protocol" 2012-08-08 14:24 sure, don't trust my words alone 2012-08-08 14:24 I'm also not sure how would you handle the accesses 2012-08-08 14:24 do you want to provide a fake FATFS? 2012-08-08 14:24 woakas has joined #qi-hardware 2012-08-08 14:25 hi, there are a lot of gadgets drivers in mainline 2012-08-08 14:25 plan C is to find a chip that can do full-speed. unfortunately, this is tricky. NXP may have one ... LPC11U12FHN33/201. but that needs further examinations. has a few quirks, i can tell that already 2012-08-08 14:25 whitequark: yes, exactly 2012-08-08 14:26 MBR, boot sector, FAT, and root directory provided by software. the clusters would be real flash blocks. 2012-08-08 14:26 wpwrak: flash? so you plan to provide your own FTL? 2012-08-08 14:26 well, chunks of flash. much larger than the chip's "block"/"page" or whatever it's called 2012-08-08 14:26 no, it's just for firmware 2012-08-08 14:27 erm, blocks and pages are different entities 2012-08-08 14:27 a page refers to write resolution, a block refers to erase resolution 2012-08-08 14:27 in MCUs you find both words 2012-08-08 14:27 and the two sizes are usually identical 2012-08-08 14:27 i.e. you can write the NAND in 2k or 4k pages (I worked with these chips), and erase them in 128k blocks or so 2012-08-08 14:27 i'm talking about small critters 2012-08-08 14:27 maybe you have a different architecture 2012-08-08 14:27 hm 2012-08-08 14:28 I think I understand what do you want to do 2012-08-08 14:28 or maybe not 2012-08-08 14:28 two cluster, 4 kB each. that order. 2012-08-08 14:28 can you elaborate? 2012-08-08 14:28 when you plug the device in a pc, it would enumerate as USB storage 2012-08-08 14:29 it would present MBR, boot sector, etc., as if it contained a FAT FS 2012-08-08 14:29 ok. what chip do you want to use for that? 2012-08-08 14:29 ATmega I guess? 2012-08-08 14:29 MBR and boot sector are sw-generated 2012-08-08 14:29 which one? 2012-08-08 14:29 attiny167, maybe attiny87 2012-08-08 14:30 hm 2012-08-08 14:30 FAT would be sw-managed - generate on boot, then remember what's written 2012-08-08 14:30 smae for the root directory. two entries :) 2012-08-08 14:30 then the two data clusters. (fw has two separate parts) 2012-08-08 14:31 then all i need to remember in the end is in which cluster which part ended up. and whether it's actually present. 2012-08-08 14:32 well, that might work 2012-08-08 14:32 you don't have a lot of ram in that chip, but your bootloader doesn't require much either. 2012-08-08 14:32 unless any nasty "sanity checks" get in the way, it should 2012-08-08 14:33 just a few bytes. buffer the usb/scsi bureaucracy. flash data can be written as we go. so there's no need to buffer entire sectors or even clusters 2012-08-08 14:33 and the fat and directory cache are also small. 2012-08-08 14:34 DocScrutinizer05: my conclusion was no try do that my self (threads library) no matter how light or cooperative it could be 2012-08-08 14:34 wpwrak: flash write operations can be quite lengthy. 2012-08-08 14:34 and CPU is halted during erase/write 2012-08-08 14:34 and if the device won't respond to SOF which is issued every 1ms it'll be reset 2012-08-08 14:35 does it have to respond to SOF ? 2012-08-08 14:35 yes 2012-08-08 14:35 it's how host understands that the device is alive. 2012-08-08 14:35 whitequark: had you tried fram latelly? 2012-08-08 14:35 kristianpaul: definitely not me 2012-08-08 14:37 wpwrak: on the other hand, I have used USBasploader successfully 2012-08-08 14:37 ah, I know why it can work 2012-08-08 14:37 mafs has joined #qi-hardware 2012-08-08 14:37 it has two separate flash partitions, and the bootloader isn't halted on application flash writes 2012-08-08 14:37 "The SOF token does not cause any receiving function to generate a return packet;". so at least in full-speed and above, there is no response. checking low-speed, which uses different SOF signaling ... 2012-08-08 14:37 hey can anyone help me? pleaseee graphic card problems 2012-08-08 14:38 noooooooooooooooooo 2012-08-08 14:38 wpwrak: whether in your device you don't have two separate ones but just one single partition 2012-08-08 14:38 mafs: sorry not general hardware support channel 2012-08-08 14:38 at least you mean milkymist one graphic card :) 2012-08-08 14:39 judging from the parallel programming characteristics, a chip erase takes 7.5 to 9 ms, and a page write takes 3.7 to 4.5 ms 2012-08-08 14:39 mafs has quit [Client Quit] 2012-08-08 14:39 larsc is the expert of graphic cards, ask him 2012-08-08 14:39 wpwrak: there's also another problem 2012-08-08 14:39 wpwrak: you can only write one page at a time and then you have to wait, but the host would happily send you data in whatever quantity it wants 2012-08-08 14:40 I don't quite remember how much one bulk transfer can be, but it's definitely more than 64 words 2012-08-08 14:40 you'll have to NAK it the (transfer_size / page_size) times 2012-08-08 14:41 kristianpaul: what's your need in a thread library? 2012-08-08 14:43 whitequark: i don't see anything that suggests the device needs to take action on a keep-alive (SOF for full-speed and above, EOP for low-speed), except that it should suspend if it doesn't receive any 2012-08-08 14:44 the bulk transfer will come in many little 8 byte chunks 2012-08-08 14:45 hm 2012-08-08 14:45 maybe, I don't remember USB spec that good anymore 2012-08-08 14:46 probably I'm wrong here 2012-08-08 14:46 whitequark: portabillity and parallel computing 2012-08-08 14:46 whitequark: let's hope so :) 2012-08-08 14:53 i also wonder if a 48 MHz NXP LPCxxx could be fast enough to do full-speed sw USB ;) 2012-08-08 14:58 wpwrak: quite certainly not 2012-08-08 14:58 because USB is, you know, 480 Mbit/s :) 2012-08-08 14:58 high-speed quite possibly, but I doubt you want to develop a USB stack 2012-08-08 14:58 kristoffer has joined #qi-hardware 2012-08-08 14:58 full-speed is 12 Mbps 2012-08-08 14:59 and you can do Mass Storage with full-speed ! ;-) 2012-08-08 14:59 ah, full- vs high-speed 2012-08-08 14:59 I always mix up the two 2012-08-08 14:59 and it wouldn't exectly be the first usb stack i've made :) 2012-08-08 14:59 oh :) 2012-08-08 14:59 well, good luck then :) 2012-08-08 15:00 well, so far the "stacks" had sat on hardware handling the bit-level stuff. i've written a bit-level decoder, though (for something like a logic analyzer) 2012-08-08 15:00 besides, there's v-usb as a reference. and there's a PIC variant, too 2012-08-08 15:02 now, a CPU clock of 48 MHz may not quite be enough, but perhaps the CPU could send/receive the data over 1/2 SPI links, with the appropriate trickery. 2012-08-08 15:02 sw would then just have to move whole bytes/words and watch for EOP 2012-08-08 15:03 then ACK and then figure out what it has actually received :) 2012-08-08 15:10 emeb has quit [Quit: Leaving.] 2012-08-08 15:15 guanucoluis has quit [Ping timeout: 255 seconds] 2012-08-08 15:19 porchao has joined #qi-hardware 2012-08-08 16:02 xiangfu has quit [Ping timeout: 246 seconds] 2012-08-08 16:23 grmbl. the critter is so slow writing to its flash that the usb stack thinks the device is dead and gives up. even if defer the flashing until after usbPoll returns. 2012-08-08 16:25 wpwrak: what about a usb serial port or parallel port device? isn't that any standard at all? 2012-08-08 16:25 or usbaudio 2012-08-08 16:27 hmm. printer. there's probably a massive software stack between a file and the printer. it's even bad on linux, with cups, printer-specific profiles, and so on. 2012-08-08 16:27 printing in linux never worked. 2012-08-08 16:28 audio may be standard .. but the you probably have to reconfigure the system. not nice. 2012-08-08 16:28 oh, printing worked perfectly ... in the days of "lpr" 2012-08-08 16:28 lpr file-our-printer-will-understand 2012-08-08 16:29 add gs to your print filter, for extra comfort (unless your printer already speaks ps natively, which back then only the really expensive ones did) 2012-08-08 16:33 Ornotermes has quit [*.net *.split] 2012-08-08 16:33 mth has quit [*.net *.split] 2012-08-08 16:34 Ornotermes has joined #qi-hardware 2012-08-08 16:34 mth has joined #qi-hardware 2012-08-08 16:44 how that's funny: NXP put USB drivers in the ROM of some of their (pricier) MCUs. when with goodies like mass-storage and DFU. 2012-08-08 16:45 Ornotermes has quit [*.net *.split] 2012-08-08 16:45 mth has quit [*.net *.split] 2012-08-08 16:45 Ornotermes has joined #qi-hardware 2012-08-08 16:45 mth has joined #qi-hardware 2012-08-08 16:45 urandom__ has joined #qi-hardware 2012-08-08 16:49 hah, and is seems that nxp are doing something very similar to what i have in mind. also with emulated mbr, boot sector, fat, directory. 2012-08-08 16:50 wpwrak: but this is the cups era. 2012-08-08 16:51 I remember that I had to touch cups code... it was a big mess, for my taste 2012-08-08 16:51 (I needed it to check certificates for https urls. It doesn't check anything otherwise) 2012-08-08 16:52 cups is a mess, yes. that's why i'm pining for the good old days. the golden age of unix printing. 2012-08-08 16:52 then there was the ghostscript split too 2012-08-08 16:52 gnu ghostscript, vs ghostscript.com 2012-08-08 16:52 one lagging vs the other... 2012-08-08 16:53 both gplv3 :) 2012-08-08 16:55 kilae has quit [Quit: ChatZilla 0.9.88.2 [Firefox 14.0.1/20120713134347]] 2012-08-08 17:02 kristoffer has quit [Ping timeout: 252 seconds] 2012-08-08 17:10 that must have been long before glpv3 2012-08-08 17:33 jekhor has quit [Ping timeout: 240 seconds] 2012-08-08 17:35 xwalk has quit [Ping timeout: 248 seconds] 2012-08-08 17:37 wpwrak has quit [Ping timeout: 260 seconds] 2012-08-08 17:39 wpwrak has joined #qi-hardware 2012-08-08 17:47 zear has quit [Ping timeout: 260 seconds] 2012-08-08 17:47 DocScrutinizer has quit [Remote host closed the connection] 2012-08-08 17:48 xwalk has joined #qi-hardware 2012-08-08 17:49 DocScrutinizer has joined #qi-hardware 2012-08-08 17:55 GNUtoo has quit [*.net *.split] 2012-08-08 17:55 rozzin has quit [*.net *.split] 2012-08-08 17:55 Jay7 has quit [*.net *.split] 2012-08-08 17:55 liuqi has quit [*.net *.split] 2012-08-08 17:55 kanzure has quit [*.net *.split] 2012-08-08 17:58 GNUtoo has joined #qi-hardware 2012-08-08 17:58 rozzin has joined #qi-hardware 2012-08-08 17:58 liuqi has joined #qi-hardware 2012-08-08 17:58 Jay7 has joined #qi-hardware 2012-08-08 17:58 kanzure has joined #qi-hardware 2012-08-08 18:18 zear has joined #qi-hardware 2012-08-08 18:21 kristoffer has joined #qi-hardware 2012-08-08 18:26 wpwrak: they are still split and gnu updating from the .com. I think the gnu release only changes some docs and source code comments. 2012-08-08 18:31 ah :) didn't hear of the non-gnu one for at least a decade :) 2012-08-08 18:35 the gnu one is the *lagged* 2012-08-08 18:36 wasn't it called "GPL Ghostscript"? 2012-08-08 18:48 could be 2012-08-08 18:48 jekhor has joined #qi-hardware 2012-08-08 19:07 GNUtoo has quit [Ping timeout: 252 seconds] 2012-08-08 19:07 GNUtoo|laptop has joined #qi-hardware 2012-08-08 19:45 kristoffer has quit [Quit: Leaving] 2012-08-08 19:47 guanucoluis has joined #qi-hardware 2012-08-08 19:58 freakazoid0223 has joined #qi-hardware 2012-08-08 20:24 antgreen has joined #qi-hardware 2012-08-08 20:31 antgreen has quit [Remote host closed the connection] 2012-08-08 20:31 wej has quit [Ping timeout: 272 seconds] 2012-08-08 20:41 jow_laptop has quit [Ping timeout: 248 seconds] 2012-08-08 20:56 wej has joined #qi-hardware 2012-08-08 21:11 guanucoluis has quit [Ping timeout: 245 seconds] 2012-08-08 21:11 guanucoluis1 has joined #qi-hardware 2012-08-08 22:11 GNUtoo|laptop has quit [Quit: Program received signal SIGSEGV, Segmentation fault.] 2012-08-08 22:19 kuribas has quit [Remote host closed the connection] 2012-08-08 22:27 urandom__ has quit [Remote host closed the connection] 2012-08-08 22:32 GeorgeH-Away is now known as GeorgeH 2012-08-08 22:32 GeorgeH has quit [Quit: Leaving] 2012-08-08 22:32 GeorgeH has joined #qi-hardware 2012-08-08 22:34 jekhor has quit [Ping timeout: 268 seconds] 2012-08-08 22:38 jurting has quit [Read error: Connection reset by peer] 2012-08-08 23:17 guanucoluis1 has quit [Ping timeout: 245 seconds] 2012-08-08 23:18 losinggeneration has quit [Ping timeout: 244 seconds] 2012-08-08 23:24 losinggeneration has joined #qi-hardware 2012-08-08 23:44 xiangfu has joined #qi-hardware 2012-08-08 23:51 xiangfu has quit [Quit: Leaving] 2012-08-08 23:56 rejon has quit [Ping timeout: 248 seconds] 2012-08-08 23:58 jow_laptop has joined #qi-hardware 2012-08-08 23:59 scientes has quit [Ping timeout: 268 seconds]