Add ek-ra8d1 rw007 support.

This commit is contained in:
Rbb666 2024-04-11 17:45:38 +08:00 committed by Meco Man
parent a93722c3e1
commit 90f4d94ce8
7 changed files with 188 additions and 74 deletions

View File

@ -607,4 +607,41 @@ menu "Hardware Drivers Config"
select RT_USING_NETDEV select RT_USING_NETDEV
default n default n
endmenu endmenu
menu "Board extended module Drivers"
menuconfig BSP_USING_RW007
bool "Enable RW007"
default n
select PKG_USING_RW007
select BSP_USING_SCI
select BSP_USING_SCI2
select BSP_USING_SCI2_SPI
select RT_USING_MEMPOOL
select RW007_NOT_USE_EXAMPLE_DRIVERS
if BSP_USING_RW007
config RA_RW007_SPI_BUS_NAME
string "RW007 BUS NAME"
default "scpi2"
config RA_RW007_CS_PIN
hex "(HEX)CS pin index"
default 0x0A05
config RA_RW007_BOOT0_PIN
hex "(HEX)BOOT0 pin index (same as spi clk pin)"
default 0x0A04
config RA_RW007_BOOT1_PIN
hex "(HEX)BOOT1 pin index (same as spi cs pin)"
default 0x0A05
config RA_RW007_INT_BUSY_PIN
hex "(HEX)INT/BUSY pin index"
default 0x0508
config RA_RW007_RST_PIN
hex "(HEX)RESET pin index"
default 0x0809
endif
endmenu
endmenu endmenu

View File

@ -19,50 +19,62 @@
case BSP_IO_PORT_04_PIN_00: \ case BSP_IO_PORT_04_PIN_00: \
case BSP_IO_PORT_02_PIN_06: \ case BSP_IO_PORT_02_PIN_06: \
case BSP_IO_PORT_01_PIN_05: \ case BSP_IO_PORT_01_PIN_05: \
case BSP_IO_PORT_08_PIN_06: \
return 0; \ return 0; \
case BSP_IO_PORT_02_PIN_05: \ case BSP_IO_PORT_05_PIN_08: \
case BSP_IO_PORT_01_PIN_01: \ case BSP_IO_PORT_01_PIN_01: \
case BSP_IO_PORT_01_PIN_04: \ case BSP_IO_PORT_01_PIN_04: \
return 1; \ return 1; \
case BSP_IO_PORT_02_PIN_03: \ case BSP_IO_PORT_05_PIN_09: \
case BSP_IO_PORT_01_PIN_00: \ case BSP_IO_PORT_01_PIN_00: \
case BSP_IO_PORT_02_PIN_13: \ case BSP_IO_PORT_02_PIN_13: \
return 2; \ return 2; \
case BSP_IO_PORT_02_PIN_02: \ case BSP_IO_PORT_02_PIN_08: \
case BSP_IO_PORT_01_PIN_10: \ case BSP_IO_PORT_05_PIN_10: \
case BSP_IO_PORT_02_PIN_12: \ case BSP_IO_PORT_02_PIN_12: \
return 3; \ return 3; \
case BSP_IO_PORT_04_PIN_02: \ case BSP_IO_PORT_04_PIN_02: \
case BSP_IO_PORT_01_PIN_11: \ case BSP_IO_PORT_03_PIN_00: \
case BSP_IO_PORT_04_PIN_11: \ case BSP_IO_PORT_04_PIN_11: \
case BSP_IO_PORT_10_PIN_10: \
return 4; \ return 4; \
case BSP_IO_PORT_04_PIN_01: \ case BSP_IO_PORT_04_PIN_01: \
case BSP_IO_PORT_03_PIN_02: \ case BSP_IO_PORT_03_PIN_02: \
case BSP_IO_PORT_04_PIN_10: \ case BSP_IO_PORT_04_PIN_10: \
case BSP_IO_PORT_10_PIN_09: \
return 5; \ return 5; \
case BSP_IO_PORT_03_PIN_01: \ case BSP_IO_PORT_03_PIN_01: \
case BSP_IO_PORT_00_PIN_00: \ case BSP_IO_PORT_00_PIN_00: \
case BSP_IO_PORT_04_PIN_09: \ case BSP_IO_PORT_04_PIN_09: \
case BSP_IO_PORT_10_PIN_08: \
return 6; \ return 6; \
case BSP_IO_PORT_00_PIN_01: \ case BSP_IO_PORT_00_PIN_01: \
case BSP_IO_PORT_04_PIN_08: \ case BSP_IO_PORT_04_PIN_08: \
case BSP_IO_PORT_06_PIN_15: \
case BSP_IO_PORT_07_PIN_06: \
return 7; \ return 7; \
case BSP_IO_PORT_00_PIN_02: \ case BSP_IO_PORT_00_PIN_02: \
case BSP_IO_PORT_03_PIN_05: \ case BSP_IO_PORT_03_PIN_05: \
case BSP_IO_PORT_04_PIN_15: \ case BSP_IO_PORT_04_PIN_15: \
case BSP_IO_PORT_07_PIN_07: \
case BSP_IO_PORT_09_PIN_05: \
return 8; \ return 8; \
case BSP_IO_PORT_00_PIN_04: \ case BSP_IO_PORT_00_PIN_04: \
case BSP_IO_PORT_03_PIN_04: \ case BSP_IO_PORT_03_PIN_04: \
case BSP_IO_PORT_04_PIN_14: \ case BSP_IO_PORT_04_PIN_14: \
case BSP_IO_PORT_09_PIN_06: \
return 9; \ return 9; \
case BSP_IO_PORT_00_PIN_05: \ case BSP_IO_PORT_00_PIN_05: \
case BSP_IO_PORT_07_PIN_09: \ case BSP_IO_PORT_07_PIN_09: \
case BSP_IO_PORT_09_PIN_07: \
return 10; \ return 10; \
case BSP_IO_PORT_05_PIN_01: \ case BSP_IO_PORT_05_PIN_01: \
case BSP_IO_PORT_00_PIN_06: \ case BSP_IO_PORT_00_PIN_06: \
case BSP_IO_PORT_07_PIN_08: \ case BSP_IO_PORT_07_PIN_08: \
case BSP_IO_PORT_08_PIN_00: \
case BSP_IO_PORT_09_PIN_08: \
return 11; \ return 11; \
case BSP_IO_PORT_05_PIN_02: \ case BSP_IO_PORT_08_PIN_01: \
case BSP_IO_PORT_00_PIN_08: \ case BSP_IO_PORT_00_PIN_08: \
return 12; \ return 12; \
case BSP_IO_PORT_00_PIN_15: \ case BSP_IO_PORT_00_PIN_15: \
@ -70,11 +82,12 @@
return 13; \ return 13; \
case BSP_IO_PORT_04_PIN_03: \ case BSP_IO_PORT_04_PIN_03: \
case BSP_IO_PORT_05_PIN_12: \ case BSP_IO_PORT_05_PIN_12: \
case BSP_IO_PORT_05_PIN_05: \ case BSP_IO_PORT_08_PIN_04: \
case BSP_IO_PORT_00_PIN_10: \
return 14; \ return 14; \
case BSP_IO_PORT_04_PIN_04: \ case BSP_IO_PORT_04_PIN_04: \
case BSP_IO_PORT_05_PIN_11: \ case BSP_IO_PORT_05_PIN_11: \
case BSP_IO_PORT_05_PIN_06: \ case BSP_IO_PORT_08_PIN_08: \
return 15; \ return 15; \
default : \ default : \
return -1; \ return -1; \

View File

@ -1,49 +0,0 @@
#ifndef __OMV_FF_H__
#define __OMV_FF_H__
#include "dfs_file.h"
typedef struct dfs_file FIL;
typedef char TCHAR;
typedef unsigned int UINT;
typedef unsigned char BYTE;
typedef int FF_DIR;
typedef struct stat FILINFO;
typedef enum {
FR_OK = 0, /* (0) Succeeded */
FR_DISK_ERR, /* (1) A hard error occurred in the low level disk I/O layer */
FR_INT_ERR, /* (2) Assertion failed */
FR_NOT_READY, /* (3) The physical drive cannot work */
FR_NO_FILE, /* (4) Could not find the file */
FR_NO_PATH, /* (5) Could not find the path */
FR_INVALID_NAME, /* (6) The path name format is invalid */
FR_DENIED, /* (7) Access denied due to prohibited access or directory full */
FR_EXIST, /* (8) Access denied due to prohibited access */
FR_INVALID_OBJECT, /* (9) The file/directory object is invalid */
FR_WRITE_PROTECTED, /* (10) The physical drive is write protected */
FR_INVALID_DRIVE, /* (11) The logical drive number is invalid */
FR_NOT_ENABLED, /* (12) The volume has no work area */
FR_NO_FILESYSTEM, /* (13) There is no valid FAT volume */
FR_MKFS_ABORTED, /* (14) The f_mkfs() aborted due to any problem */
FR_TIMEOUT, /* (15) Could not get a grant to access the volume within defined period */
FR_LOCKED, /* (16) The operation is rejected according to the file sharing policy */
FR_NOT_ENOUGH_CORE, /* (17) LFN working buffer could not be allocated */
FR_TOO_MANY_OPEN_FILES, /* (18) Number of open files > _FS_LOCK */
FR_INVALID_PARAMETER /* (19) Given parameter is invalid */
} FRESULT;
/* File access mode and open method flags (3rd argument of f_open) */
#define FA_READ 0x01
#define FA_WRITE 0x02
#define FA_OPEN_EXISTING 0x00
#define FA_CREATE_NEW 0x04
#define FA_CREATE_ALWAYS 0x08
#define FA_OPEN_ALWAYS 0x10
#define FA_OPEN_APPEND 0x30
#define f_eof(fp) ((int)((fp)->pos == (fp)->vnode->size))
#define f_tell(fp) ((fp)->pos)
#define f_size(fp) ((fp)->vnode->size)
#endif

View File

@ -0,0 +1,22 @@
from building import *
import rtconfig
cwd = GetCurrentDir()
src = []
if GetDepend(['BSP_USING_RW007']):
src += Glob('drv_rw007.c')
CPPPATH = [cwd]
LOCAL_CFLAGS = ''
if rtconfig.PLATFORM in ['gcc', 'armclang']:
LOCAL_CFLAGS += ' -std=c99'
elif rtconfig.PLATFORM in ['armcc']:
LOCAL_CFLAGS += ' --c99'
group = DefineGroup('Drivers', src, depend = [], CPPPATH = CPPPATH, LOCAL_CFLAGS = LOCAL_CFLAGS)
Return('group')

View File

@ -0,0 +1,65 @@
#include <rtthread.h>
#include <rtdbg.h>
#ifdef BSP_USING_RW007
#include <rtdevice.h>
#include <drv_sci_spi.h>
#include <board.h>
#include <spi_wifi_rw007.h>
extern void spi_wifi_isr(int vector);
static void rw007_gpio_init(void)
{
/* Configure IO */
rt_pin_mode(RA_RW007_RST_PIN, PIN_MODE_OUTPUT);
rt_pin_mode(RA_RW007_INT_BUSY_PIN, PIN_MODE_INPUT_PULLDOWN);
/* Reset rw007 and config mode */
rt_pin_write(RA_RW007_RST_PIN, PIN_LOW);
rt_thread_delay(rt_tick_from_millisecond(100));
rt_pin_write(RA_RW007_RST_PIN, PIN_HIGH);
/* Wait rw007 ready(exit busy stat) */
while (!rt_pin_read(RA_RW007_INT_BUSY_PIN))
{
rt_thread_delay(5);
}
rt_thread_delay(rt_tick_from_millisecond(200));
rt_pin_mode(RA_RW007_INT_BUSY_PIN, PIN_MODE_INPUT_PULLUP);
}
int wifi_spi_device_init(void)
{
char sn_version[32];
uint32_t cs_pin = RA_RW007_CS_PIN;
rw007_gpio_init();
rt_hw_sci_spi_device_attach(RA_RW007_SPI_BUS_NAME, "wspi", cs_pin);
rt_hw_wifi_init("wspi");
rt_wlan_set_mode(RT_WLAN_DEVICE_STA_NAME, RT_WLAN_STATION);
rt_wlan_set_mode(RT_WLAN_DEVICE_AP_NAME, RT_WLAN_AP);
rw007_sn_get(sn_version);
rt_kprintf("\nrw007 sn: [%s]\n", sn_version);
rw007_version_get(sn_version);
rt_kprintf("rw007 ver: [%s]\n\n", sn_version);
return 0;
}
INIT_APP_EXPORT(wifi_spi_device_init);
static void int_wifi_irq(void *p)
{
((void)p);
spi_wifi_isr(0);
}
void spi_wifi_hw_init(void)
{
rt_pin_attach_irq(RA_RW007_INT_BUSY_PIN, PIN_IRQ_MODE_FALLING, int_wifi_irq, 0);
rt_pin_irq_enable(RA_RW007_INT_BUSY_PIN, RT_TRUE);
}
#endif /* BSP_USING_RW007 */

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2006-2024, RT-Thread Development Team * Copyright (c) 2006-2023, RT-Thread Development Team
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
* *
@ -19,50 +19,62 @@
case BSP_IO_PORT_04_PIN_00: \ case BSP_IO_PORT_04_PIN_00: \
case BSP_IO_PORT_02_PIN_06: \ case BSP_IO_PORT_02_PIN_06: \
case BSP_IO_PORT_01_PIN_05: \ case BSP_IO_PORT_01_PIN_05: \
case BSP_IO_PORT_08_PIN_06: \
return 0; \ return 0; \
case BSP_IO_PORT_02_PIN_05: \ case BSP_IO_PORT_05_PIN_08: \
case BSP_IO_PORT_01_PIN_01: \ case BSP_IO_PORT_01_PIN_01: \
case BSP_IO_PORT_01_PIN_04: \ case BSP_IO_PORT_01_PIN_04: \
return 1; \ return 1; \
case BSP_IO_PORT_02_PIN_03: \ case BSP_IO_PORT_05_PIN_09: \
case BSP_IO_PORT_01_PIN_00: \ case BSP_IO_PORT_01_PIN_00: \
case BSP_IO_PORT_02_PIN_13: \ case BSP_IO_PORT_02_PIN_13: \
return 2; \ return 2; \
case BSP_IO_PORT_02_PIN_02: \ case BSP_IO_PORT_02_PIN_08: \
case BSP_IO_PORT_01_PIN_10: \ case BSP_IO_PORT_05_PIN_10: \
case BSP_IO_PORT_02_PIN_12: \ case BSP_IO_PORT_02_PIN_12: \
return 3; \ return 3; \
case BSP_IO_PORT_04_PIN_02: \ case BSP_IO_PORT_04_PIN_02: \
case BSP_IO_PORT_01_PIN_11: \ case BSP_IO_PORT_03_PIN_00: \
case BSP_IO_PORT_04_PIN_11: \ case BSP_IO_PORT_04_PIN_11: \
case BSP_IO_PORT_10_PIN_10: \
return 4; \ return 4; \
case BSP_IO_PORT_04_PIN_01: \ case BSP_IO_PORT_04_PIN_01: \
case BSP_IO_PORT_03_PIN_02: \ case BSP_IO_PORT_03_PIN_02: \
case BSP_IO_PORT_04_PIN_10: \ case BSP_IO_PORT_04_PIN_10: \
case BSP_IO_PORT_10_PIN_09: \
return 5; \ return 5; \
case BSP_IO_PORT_03_PIN_01: \ case BSP_IO_PORT_03_PIN_01: \
case BSP_IO_PORT_00_PIN_00: \ case BSP_IO_PORT_00_PIN_00: \
case BSP_IO_PORT_04_PIN_09: \ case BSP_IO_PORT_04_PIN_09: \
case BSP_IO_PORT_10_PIN_08: \
return 6; \ return 6; \
case BSP_IO_PORT_00_PIN_01: \ case BSP_IO_PORT_00_PIN_01: \
case BSP_IO_PORT_04_PIN_08: \ case BSP_IO_PORT_04_PIN_08: \
case BSP_IO_PORT_06_PIN_15: \
case BSP_IO_PORT_07_PIN_06: \
return 7; \ return 7; \
case BSP_IO_PORT_00_PIN_02: \ case BSP_IO_PORT_00_PIN_02: \
case BSP_IO_PORT_03_PIN_05: \ case BSP_IO_PORT_03_PIN_05: \
case BSP_IO_PORT_04_PIN_15: \ case BSP_IO_PORT_04_PIN_15: \
case BSP_IO_PORT_07_PIN_07: \
case BSP_IO_PORT_09_PIN_05: \
return 8; \ return 8; \
case BSP_IO_PORT_00_PIN_04: \ case BSP_IO_PORT_00_PIN_04: \
case BSP_IO_PORT_03_PIN_04: \ case BSP_IO_PORT_03_PIN_04: \
case BSP_IO_PORT_04_PIN_14: \ case BSP_IO_PORT_04_PIN_14: \
case BSP_IO_PORT_09_PIN_06: \
return 9; \ return 9; \
case BSP_IO_PORT_00_PIN_05: \ case BSP_IO_PORT_00_PIN_05: \
case BSP_IO_PORT_07_PIN_09: \ case BSP_IO_PORT_07_PIN_09: \
case BSP_IO_PORT_09_PIN_07: \
return 10; \ return 10; \
case BSP_IO_PORT_05_PIN_01: \ case BSP_IO_PORT_05_PIN_01: \
case BSP_IO_PORT_00_PIN_06: \ case BSP_IO_PORT_00_PIN_06: \
case BSP_IO_PORT_07_PIN_08: \ case BSP_IO_PORT_07_PIN_08: \
case BSP_IO_PORT_08_PIN_00: \
case BSP_IO_PORT_09_PIN_08: \
return 11; \ return 11; \
case BSP_IO_PORT_05_PIN_02: \ case BSP_IO_PORT_08_PIN_01: \
case BSP_IO_PORT_00_PIN_08: \ case BSP_IO_PORT_00_PIN_08: \
return 12; \ return 12; \
case BSP_IO_PORT_00_PIN_15: \ case BSP_IO_PORT_00_PIN_15: \
@ -70,11 +82,12 @@
return 13; \ return 13; \
case BSP_IO_PORT_04_PIN_03: \ case BSP_IO_PORT_04_PIN_03: \
case BSP_IO_PORT_05_PIN_12: \ case BSP_IO_PORT_05_PIN_12: \
case BSP_IO_PORT_05_PIN_05: \ case BSP_IO_PORT_08_PIN_04: \
case BSP_IO_PORT_00_PIN_10: \
return 14; \ return 14; \
case BSP_IO_PORT_04_PIN_04: \ case BSP_IO_PORT_04_PIN_04: \
case BSP_IO_PORT_05_PIN_11: \ case BSP_IO_PORT_05_PIN_11: \
case BSP_IO_PORT_05_PIN_06: \ case BSP_IO_PORT_08_PIN_08: \
return 15; \ return 15; \
default : \ default : \
return -1; \ return -1; \

View File

@ -19,50 +19,62 @@
case BSP_IO_PORT_04_PIN_00: \ case BSP_IO_PORT_04_PIN_00: \
case BSP_IO_PORT_02_PIN_06: \ case BSP_IO_PORT_02_PIN_06: \
case BSP_IO_PORT_01_PIN_05: \ case BSP_IO_PORT_01_PIN_05: \
case BSP_IO_PORT_08_PIN_06: \
return 0; \ return 0; \
case BSP_IO_PORT_02_PIN_05: \ case BSP_IO_PORT_05_PIN_08: \
case BSP_IO_PORT_01_PIN_01: \ case BSP_IO_PORT_01_PIN_01: \
case BSP_IO_PORT_01_PIN_04: \ case BSP_IO_PORT_01_PIN_04: \
return 1; \ return 1; \
case BSP_IO_PORT_02_PIN_03: \ case BSP_IO_PORT_05_PIN_09: \
case BSP_IO_PORT_01_PIN_00: \ case BSP_IO_PORT_01_PIN_00: \
case BSP_IO_PORT_02_PIN_13: \ case BSP_IO_PORT_02_PIN_13: \
return 2; \ return 2; \
case BSP_IO_PORT_02_PIN_02: \ case BSP_IO_PORT_02_PIN_08: \
case BSP_IO_PORT_01_PIN_10: \ case BSP_IO_PORT_05_PIN_10: \
case BSP_IO_PORT_02_PIN_12: \ case BSP_IO_PORT_02_PIN_12: \
return 3; \ return 3; \
case BSP_IO_PORT_04_PIN_02: \ case BSP_IO_PORT_04_PIN_02: \
case BSP_IO_PORT_01_PIN_11: \ case BSP_IO_PORT_03_PIN_00: \
case BSP_IO_PORT_04_PIN_11: \ case BSP_IO_PORT_04_PIN_11: \
case BSP_IO_PORT_10_PIN_10: \
return 4; \ return 4; \
case BSP_IO_PORT_04_PIN_01: \ case BSP_IO_PORT_04_PIN_01: \
case BSP_IO_PORT_03_PIN_02: \ case BSP_IO_PORT_03_PIN_02: \
case BSP_IO_PORT_04_PIN_10: \ case BSP_IO_PORT_04_PIN_10: \
case BSP_IO_PORT_10_PIN_09: \
return 5; \ return 5; \
case BSP_IO_PORT_03_PIN_01: \ case BSP_IO_PORT_03_PIN_01: \
case BSP_IO_PORT_00_PIN_00: \ case BSP_IO_PORT_00_PIN_00: \
case BSP_IO_PORT_04_PIN_09: \ case BSP_IO_PORT_04_PIN_09: \
case BSP_IO_PORT_10_PIN_08: \
return 6; \ return 6; \
case BSP_IO_PORT_00_PIN_01: \ case BSP_IO_PORT_00_PIN_01: \
case BSP_IO_PORT_04_PIN_08: \ case BSP_IO_PORT_04_PIN_08: \
case BSP_IO_PORT_06_PIN_15: \
case BSP_IO_PORT_07_PIN_06: \
return 7; \ return 7; \
case BSP_IO_PORT_00_PIN_02: \ case BSP_IO_PORT_00_PIN_02: \
case BSP_IO_PORT_03_PIN_05: \ case BSP_IO_PORT_03_PIN_05: \
case BSP_IO_PORT_04_PIN_15: \ case BSP_IO_PORT_04_PIN_15: \
case BSP_IO_PORT_07_PIN_07: \
case BSP_IO_PORT_09_PIN_05: \
return 8; \ return 8; \
case BSP_IO_PORT_00_PIN_04: \ case BSP_IO_PORT_00_PIN_04: \
case BSP_IO_PORT_03_PIN_04: \ case BSP_IO_PORT_03_PIN_04: \
case BSP_IO_PORT_04_PIN_14: \ case BSP_IO_PORT_04_PIN_14: \
case BSP_IO_PORT_09_PIN_06: \
return 9; \ return 9; \
case BSP_IO_PORT_00_PIN_05: \ case BSP_IO_PORT_00_PIN_05: \
case BSP_IO_PORT_07_PIN_09: \ case BSP_IO_PORT_07_PIN_09: \
case BSP_IO_PORT_09_PIN_07: \
return 10; \ return 10; \
case BSP_IO_PORT_05_PIN_01: \ case BSP_IO_PORT_05_PIN_01: \
case BSP_IO_PORT_00_PIN_06: \ case BSP_IO_PORT_00_PIN_06: \
case BSP_IO_PORT_07_PIN_08: \ case BSP_IO_PORT_07_PIN_08: \
case BSP_IO_PORT_08_PIN_00: \
case BSP_IO_PORT_09_PIN_08: \
return 11; \ return 11; \
case BSP_IO_PORT_05_PIN_02: \ case BSP_IO_PORT_08_PIN_01: \
case BSP_IO_PORT_00_PIN_08: \ case BSP_IO_PORT_00_PIN_08: \
return 12; \ return 12; \
case BSP_IO_PORT_00_PIN_15: \ case BSP_IO_PORT_00_PIN_15: \
@ -70,11 +82,12 @@
return 13; \ return 13; \
case BSP_IO_PORT_04_PIN_03: \ case BSP_IO_PORT_04_PIN_03: \
case BSP_IO_PORT_05_PIN_12: \ case BSP_IO_PORT_05_PIN_12: \
case BSP_IO_PORT_05_PIN_05: \ case BSP_IO_PORT_08_PIN_04: \
case BSP_IO_PORT_00_PIN_10: \
return 14; \ return 14; \
case BSP_IO_PORT_04_PIN_04: \ case BSP_IO_PORT_04_PIN_04: \
case BSP_IO_PORT_05_PIN_11: \ case BSP_IO_PORT_05_PIN_11: \
case BSP_IO_PORT_05_PIN_06: \ case BSP_IO_PORT_08_PIN_08: \
return 15; \ return 15; \
default : \ default : \
return -1; \ return -1; \