diff --git a/apps/debug_menu.c b/apps/debug_menu.c index aec0a9a..f62ea89 100644 --- a/apps/debug_menu.c +++ b/apps/debug_menu.c @@ -1915,7 +1915,7 @@ static bool dbg_fm_radio(void) #endif /* CONFIG_TUNER */ #endif /* !SIMULATOR */ -#if defined(HAVE_LCD_BITMAP) && !defined(APPLICATION) +#if defined(HAVE_LCD_BITMAP) && (!defined(APPLICATION) || defined(SAMSUNG_YPR0)) extern bool do_screendump_instead_of_usb; static bool dbg_screendump(void) @@ -2184,7 +2184,7 @@ static const struct { #if (CONFIG_BATTERY_MEASURE != 0) && !defined(SIMULATOR) { "View battery", view_battery }, #endif -#ifndef APPLICATION +#if (!defined(APPLICATION) || defined(SAMSUNG_YPR0)) { "Screendump", dbg_screendump }, #endif #endif diff --git a/apps/main.c b/apps/main.c index 6b6566c..05df4ed 100644 --- a/apps/main.c +++ b/apps/main.c @@ -421,6 +421,8 @@ static void init(void) scrobbler_init(); audio_init(); + + usb_init(); #if (CONFIG_CODEC == SWCODEC) && defined(HAVE_RECORDING) pcm_rec_init(); diff --git a/firmware/SOURCES b/firmware/SOURCES index f5e2c76..6231f10 100644 --- a/firmware/SOURCES +++ b/firmware/SOURCES @@ -96,6 +96,7 @@ target/hosted/ypr0/audio-ypr0.c #if CONFIG_TUNER target/hosted/ypr0/radio-ypr0.c #endif +target/hosted/ypr0/usb-ypr0.c #endif /* Maemo specific files */ diff --git a/firmware/export/config/samsungypr0.h b/firmware/export/config/samsungypr0.h index e97dabc..29e05a1 100644 --- a/firmware/export/config/samsungypr0.h +++ b/firmware/export/config/samsungypr0.h @@ -12,11 +12,10 @@ #define MODEL_NAME "Samsung YP-R0" -/* Indeed to check that */ -/*TODO: R0 should charge battery automatically, no software stuff to manage that. Just to know about some as3543 registers, that should be set after loading samsung's afe.ko module - */ /*TODO: implement USB data transfer management -> see safe mode script and think a way to implemtent it in the code */ -#define USB_NONE +//#define USB_NONE +//#define HAVE_USBSTACK +//#define USE_ROCKBOX_USB /* There is only USB charging */ //#define HAVE_USB_POWER diff --git a/firmware/screendump.c b/firmware/screendump.c index 0dfe79a..0e19d24 100644 --- a/firmware/screendump.c +++ b/firmware/screendump.c @@ -28,6 +28,9 @@ #include "stdlib.h" #include "string.h" #include "system.h" +#ifdef SAMSUNG_YPR0 + #include "rbpaths.h" +#endif #ifdef HAVE_REMOTE_LCD #include "lcd-remote.h" @@ -120,11 +123,20 @@ void screen_dump(void) #endif #if CONFIG_RTC +#ifdef SAMSUNG_YPR0 + create_datetime_filename(filename, HOME_DIR, "dump ", ".bmp", false); +#else create_datetime_filename(filename, "", "dump ", ".bmp", false); +#endif +#else +#ifdef SAMSUNG_YPR0 + create_numbered_filename(filename, HOME_DIR, "dump_", ".bmp", 4 + IF_CNFN_NUM_(, NULL)); #else create_numbered_filename(filename, "", "dump_", ".bmp", 4 IF_CNFN_NUM_(, NULL)); #endif +#endif fd = creat(filename, 0666); if (fd < 0) diff --git a/firmware/target/hosted/ypr0/usb-ypr0.c b/firmware/target/hosted/ypr0/usb-ypr0.c new file mode 100644 index 0000000..0ee4756 --- /dev/null +++ b/firmware/target/hosted/ypr0/usb-ypr0.c @@ -0,0 +1,68 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2012 Lorenzo Miori + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ +#include "config.h" +#include "stdbool.h" +#include "system.h" +#include "kernel.h" +#include "usb.h" +#include "sc900776.h" +#include "unistd.h" +#include "fcntl.h" +#include "stdio.h" +#include "sys/ioctl.h" +#include "stdlib.h" + +//static bool usb_attached = false; + +void usb_init_device(void) +{ + /* Start usb detection... */ + usb_start_monitoring(); +} + +int usb_detect(void) +{ + unsigned status = USB_EXTRACTED; + /* Check if this register is set...DEVICE_1 */ + sMinivet_t rs = { .addr = 0xA, .value = 0 }; + int fd = open("/dev/minivet", O_RDONLY); //TODO: open a single instance that remains open until app shutdown + // since that's also used to see if we are connected to a charger + if (fd >= 0) + { + if (ioctl(fd, IOCTL_MINIVET_READ_BYTE, &rs) >= 0) { + printf("%i", rs.value); + status = (rs.value >> 2) ? USB_INSERTED : USB_EXTRACTED; + } + close(fd); + } + return status; +} + +void usb_enable(bool on) +{ + //TODO: of course that won't be so in the end... + if (on) { + system("./usb_on"); + } + else { + system("./usb_off"); + } +} diff --git a/firmware/usb.c b/firmware/usb.c index 6823851..a482002 100644 --- a/firmware/usb.c +++ b/firmware/usb.c @@ -51,7 +51,8 @@ (defined(HAVE_USBSTACK) && defined(USE_ROCKBOX_USB) && CONFIG_USBOTG == USBOTG_S3C6400X) || \ defined(CPU_TCC77X) || defined(CPU_TCC780X) || \ (CONFIG_USBOTG == USBOTG_JZ4740) || \ - (defined(USE_ROCKBOX_USB) && CONFIG_USBOTG == USBOTG_AS3525) + (defined(USE_ROCKBOX_USB) && CONFIG_USBOTG == USBOTG_AS3525) || \ + (defined(SAMSUNG_YPR0)) #define USB_FULL_INIT #endif @@ -322,15 +323,19 @@ static inline bool usb_configure_drivers(int for_state) static inline void usb_slave_mode(bool on) { +#if (CONFIG_PLATFORM & PLATFORM_NATIVE) int rc; +#endif if(on) { DEBUGF("Entering USB slave mode\n"); +#if (CONFIG_PLATFORM & PLATFORM_NATIVE) disk_unmount_all(); storage_soft_reset(); storage_init(); storage_enable(false); +#endif usb_enable(true); cpu_idle_mode(true); } @@ -345,6 +350,7 @@ static inline void usb_slave_mode(bool on) usb_enable(false); +#if (CONFIG_PLATFORM & PLATFORM_NATIVE) rc = storage_init(); if(rc) panicf("storage: %d",rc); @@ -353,6 +359,7 @@ static inline void usb_slave_mode(bool on) rc = disk_mount_all(); if(rc <= 0) /* no partition */ panicf("mount: %d",rc); +#endif } } #endif /* HAVE_USBSTACK */