本文整理汇总了C++中dm_init函数的典型用法代码示例。如果您正苦于以下问题:C++ dm_init函数的具体用法?C++ dm_init怎么用?C++ dm_init使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了dm_init函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: main
// ****************************************************************************
// Program entry point
int main (void)
{
// Initialize platform first
if( platform_init() != PLATFORM_OK )
{
// This should never happen
while( 1 );
}
// Initialize device manager
dm_init();
// And register the ROM filesystem
dm_register( fs_init() );
// Initialize XMODEM
xmodem_init( xmodem_send, xmodem_recv );
printf( ".text ends at %p, first free RAM is at %p, last free ram is at %p\r\n", etext, platform_get_first_free_ram(), platform_get_last_free_ram() );
// Run the shell
if( shell_init( XMODEM_MAX_FILE_SIZE ) == 0 )
printf( "Unable to initialize shell!\n" );
else
shell_start();
while( 1 );
}
开发者ID:BackupTheBerlios,项目名称:elua-svn,代码行数:30,代码来源:main.c
示例2: dm_test_main
static int dm_test_main(const char *test_name)
{
struct unit_test *tests = ll_entry_start(struct unit_test, dm_test);
const int n_ents = ll_entry_count(struct unit_test, dm_test);
struct unit_test_state *uts = &global_dm_test_state;
uts->priv = &_global_priv_dm_test_state;
struct unit_test *test;
int run_count;
/*
* If we have no device tree, or it only has a root node, then these
* tests clearly aren't going to work...
*/
if (!gd->fdt_blob || fdt_next_node(gd->fdt_blob, 0, NULL) < 0) {
puts("Please run with test device tree:\n"
" ./u-boot -d arch/sandbox/dts/test.dtb\n");
ut_assert(gd->fdt_blob);
}
if (!test_name)
printf("Running %d driver model tests\n", n_ents);
run_count = 0;
for (test = tests; test < tests + n_ents; test++) {
const char *name = test->name;
/* All tests have this prefix */
if (!strncmp(name, "dm_test_", 8))
name += 8;
if (test_name && strcmp(test_name, name))
continue;
printf("Test: %s\n", test->name);
run_count++;
ut_assertok(dm_test_init(uts));
uts->start = mallinfo();
if (test->flags & DM_TESTF_SCAN_PDATA)
ut_assertok(dm_scan_platdata(false));
if (test->flags & DM_TESTF_PROBE_TEST)
ut_assertok(do_autoprobe(uts));
if (test->flags & DM_TESTF_SCAN_FDT)
ut_assertok(dm_scan_fdt(gd->fdt_blob, false));
test->func(uts);
ut_assertok(dm_test_destroy(uts));
}
if (test_name && !run_count)
printf("Test '%s' not found\n", test_name);
else
printf("Failures: %d\n", uts->fail_count);
gd->dm_root = NULL;
ut_assertok(dm_init());
dm_scan_platdata(false);
dm_scan_fdt(gd->fdt_blob, false);
return uts->fail_count ? CMD_RET_FAILURE : 0;
}
开发者ID:CheezeCake,项目名称:edison-u-boot,代码行数:60,代码来源:test-main.c
示例3: device_manager_init
/**@brief Function for the Device Manager initialization.
*
* @param[in] erase_bonds Indicates whether bonding information should be cleared from
* persistent storage during initialization of the Device Manager.
*/
static void device_manager_init(bool erase_bonds)
{
uint32_t err_code;
dm_init_param_t init_param = {.clear_persistent_data = erase_bonds};
dm_application_param_t register_param;
// Initialize persistent storage module.
err_code = pstorage_init();
APP_ERROR_CHECK(err_code);
err_code = dm_init(&init_param);
APP_ERROR_CHECK(err_code);
memset(®ister_param.sec_param, 0, sizeof(ble_gap_sec_params_t));
register_param.sec_param.bond = SEC_PARAM_BOND;
register_param.sec_param.mitm = SEC_PARAM_MITM;
register_param.sec_param.io_caps = SEC_PARAM_IO_CAPABILITIES;
register_param.sec_param.oob = SEC_PARAM_OOB;
register_param.sec_param.min_key_size = SEC_PARAM_MIN_KEY_SIZE;
register_param.sec_param.max_key_size = SEC_PARAM_MAX_KEY_SIZE;
register_param.evt_handler = device_manager_evt_handler;
register_param.service_type = DM_PROTOCOL_CNTXT_GATT_SRVR_ID;
err_code = dm_register(&m_app_handle, ®ister_param);
APP_ERROR_CHECK(err_code);
}
开发者ID:RobinLin,项目名称:Espruino,代码行数:32,代码来源:main.c
示例4: device_manager_init
/**@brief Function for the Device Manager initialization.
*
* @param[in] erase_bonds Indicates whether bonding information should be cleared from
* persistent storage during initialization of the Device Manager.
*/
static void device_manager_init(bool erase_bonds)
{
uint32_t err_code;
dm_init_param_t init_param = {.clear_persistent_data = erase_bonds};
dm_application_param_t register_param;
// Initialize persistent storage module.
err_code = pstorage_init();
APP_ERROR_CHECK(err_code);
err_code = dm_init(&init_param);
APP_ERROR_CHECK(err_code);
memset(®ister_param.sec_param, 0, sizeof(ble_gap_sec_params_t));
register_param.sec_param.bond = SEC_PARAM_BOND;
register_param.sec_param.mitm = SEC_PARAM_MITM;
register_param.sec_param.io_caps = SEC_PARAM_IO_CAPABILITIES;
register_param.sec_param.oob = SEC_PARAM_OOB;
register_param.sec_param.min_key_size = SEC_PARAM_MIN_KEY_SIZE;
register_param.sec_param.max_key_size = SEC_PARAM_MAX_KEY_SIZE;
register_param.evt_handler = device_manager_evt_handler;
register_param.service_type = DM_PROTOCOL_CNTXT_GATT_SRVR_ID;
err_code = dm_register(&m_app_handle, ®ister_param);
APP_ERROR_CHECK(err_code);
app_bond_init(&m_app_bond_table);
for(uint8_t i = 0; i < DEVICE_MANAGER_MAX_BONDS; i++)
{
APP_LOG("[APP][ID: %d], Application context : %08X\r\n",m_app_bond_table.device_id[i],(unsigned int) m_app_bond_table.app_bond_cnt[i]);
}
}
开发者ID:hshd123,项目名称:nRF51-ble-peripheral-bond-handling,代码行数:39,代码来源:main.c
示例5: device_manager_init
/**@brief Function for the Device Manager initialization.
*/
static void device_manager_init(void)
{
uint32_t err_code;
dm_init_param_t init_data;
dm_application_param_t register_param;
// Initialize persistent storage module.
err_code = pstorage_init();
APP_ERROR_CHECK(err_code);
// Clear all bonded centrals if the "delete all bonds" button is pushed.
err_code = bsp_button_is_pressed(BOND_DELETE_ALL_WAKEUP_BUTTON_ID,&(init_data.clear_persistent_data));
APP_ERROR_CHECK(err_code);
err_code = dm_init(&init_data);
APP_ERROR_CHECK(err_code);
memset(®ister_param.sec_param, 0, sizeof(ble_gap_sec_params_t));
register_param.sec_param.timeout = SEC_PARAM_TIMEOUT;
register_param.sec_param.bond = SEC_PARAM_BOND;
register_param.sec_param.mitm = SEC_PARAM_MITM;
register_param.sec_param.io_caps = SEC_PARAM_IO_CAPABILITIES;
register_param.sec_param.oob = SEC_PARAM_OOB;
register_param.sec_param.min_key_size = SEC_PARAM_MIN_KEY_SIZE;
register_param.sec_param.max_key_size = SEC_PARAM_MAX_KEY_SIZE;
register_param.evt_handler = device_manager_evt_handler;
register_param.service_type = DM_PROTOCOL_CNTXT_GATT_SRVR_ID;
err_code = dm_register(&m_app_handle, ®ister_param);
APP_ERROR_CHECK(err_code);
}
开发者ID:451506709,项目名称:automated_machine,代码行数:34,代码来源:main.c
示例6: device_manager_init
/**@brief Function for the Device Manager initialization.
*/
static void device_manager_init(void)
{
uint32_t err_code;
dm_init_param_t init_data;
dm_application_param_t register_param;
// Initialize persistent storage module.
err_code = pstorage_init();
APP_ERROR_CHECK(err_code);
// Clear all bonded centrals if the Bonds Delete button is pushed.
init_data.clear_persistent_data = true;//(nrf_gpio_pin_read(BOND_DELETE_ALL_BUTTON_ID) == 0);
err_code = dm_init(&init_data);
APP_ERROR_CHECK(err_code);
memset(®ister_param.sec_param, 0, sizeof(ble_gap_sec_params_t));
//register_param.sec_param.timeout = SEC_PARAM_TIMEOUT;
register_param.sec_param.bond = SEC_PARAM_BOND;
register_param.sec_param.mitm = SEC_PARAM_MITM;
register_param.sec_param.io_caps = SEC_PARAM_IO_CAPABILITIES;
register_param.sec_param.oob = SEC_PARAM_OOB;
register_param.sec_param.min_key_size = SEC_PARAM_MIN_KEY_SIZE;
register_param.sec_param.max_key_size = SEC_PARAM_MAX_KEY_SIZE;
register_param.evt_handler = device_manager_evt_handler;
register_param.service_type = DM_PROTOCOL_CNTXT_NONE;
err_code = dm_register(&g_AppHandle, ®ister_param);
APP_ERROR_CHECK(err_code);
}
开发者ID:I-SYST,项目名称:EHAL,代码行数:33,代码来源:LMXDisplayBleMain.c
示例7: kernel_early_init
// TODO: Kernel init functions, kernel_early_init stub is here, kernel_init is just a declaration to shut the linker up.
void kernel_early_init(struct multiboot *mboot_header, addr_t initial_stack)
{
// This is fun, but as long as grub is a bitch, i have a problem.
// Make sure interrupts are disabled.
//asm volatile("cli");
// Store passed values, and set up the early system.
kernel_state_flags = 0;
set_ksf(KSF_BOOTING);
mtboot = mboot_header;
initial_boot_stack = initial_stack;
loader_parse_kernel_elf(mboot_header, &kernel_sections);
#if _DBOS_KERNEL_LOADER_MODULES
loader_init_kernel_symbols();
#endif
serial_init();
cpu_early_init();
#if _DBOS_KERNEL_LOADER_MODULES
loader_init_modules();
#endif
syscall_init();
cpu_timer_install(1000);
cpu_processor_init_1();
printk(8, "[KERNEL]: Parsed kernel elf, end of stub function. If you see this, then it is working.\n");
printk(1, "[KERNEL]: Starting system management.\n");
mm_init(mtboot);
tm_init_multitasking();
dm_init();
fs_init();
}
开发者ID:Dennisbonke,项目名称:DB-OS,代码行数:30,代码来源:kernel.c
示例8: setup
int setup(void **state){
int rc = 0;
dm_ctx_t *ctx = NULL;
rc = dm_init(NULL, NULL, NULL, CM_MODE_LOCAL, TEST_SCHEMA_SEARCH_DIR, TEST_DATA_SEARCH_DIR, &ctx);
*state = ctx;
return rc;
}
开发者ID:fanchanghu,项目名称:sysrepo,代码行数:7,代码来源:rp_dt_xpath_test.c
示例9: dm_init_and_scan
int dm_init_and_scan(bool pre_reloc_only)
{
int ret;
ret = dm_init();
if (ret) {
debug("dm_init() failed: %d\n", ret);
return ret;
}
ret = dm_scan_platdata(pre_reloc_only);
if (ret) {
debug("dm_scan_platdata() failed: %d\n", ret);
return ret;
}
if (CONFIG_IS_ENABLED(OF_CONTROL)) {
ret = dm_scan_fdt(gd->fdt_blob, pre_reloc_only);
if (ret) {
debug("dm_scan_fdt() failed: %d\n", ret);
return ret;
}
}
ret = dm_scan_other(pre_reloc_only);
if (ret)
return ret;
return 0;
}
开发者ID:13xiaobang,项目名称:mini2440-uboot_2016.01,代码行数:29,代码来源:root.c
示例10: dm_init_and_scan
int dm_init_and_scan(bool pre_reloc_only)
{
int ret;
ret = dm_init();
if (ret) {
debug("dm_init() failed: %d\n", ret);
return ret;
}
ret = dm_scan_platdata(pre_reloc_only);
if (ret) {
debug("dm_scan_platdata() failed: %d\n", ret);
return ret;
}
#ifdef CONFIG_OF_CONTROL
ret = dm_scan_fdt(gd->fdt_blob, pre_reloc_only);
if (ret) {
debug("dm_scan_fdt() failed: %d\n", ret);
return ret;
}
#endif
ret = dm_scan_other(pre_reloc_only);
if (ret)
return ret;
return 0;
}
开发者ID:jhendrix,项目名称:deg-uboot,代码行数:27,代码来源:root.c
示例11: device_manager_init
/**@brief Function for the Device Manager initialization.
*
* @param[in] erase_bonds Indicates whether bonding information should be cleared from
* persistent storage during initialization of the Device Manager.
*/
static void device_manager_init(bool erase_bonds)
{
uint32_t err_code;
dm_init_param_t init_param = {.clear_persistent_data = erase_bonds};
dm_application_param_t register_param;
err_code = pstorage_init();
APP_ERROR_CHECK(err_code);
err_code = dm_init(&init_param);
APP_ERROR_CHECK(err_code);
memset(®ister_param.sec_param, 0, sizeof (ble_gap_sec_params_t));
// Event handler to be registered with the module.
register_param.evt_handler = device_manager_event_handler;
// Service or protocol context for device manager to load, store and apply on behalf of application.
// Here set to client as application is a GATT client.
register_param.service_type = DM_PROTOCOL_CNTXT_GATT_CLI_ID;
// Secuirty parameters to be used for security procedures.
register_param.sec_param.bond = SEC_PARAM_BOND;
register_param.sec_param.mitm = SEC_PARAM_MITM;
register_param.sec_param.io_caps = SEC_PARAM_IO_CAPABILITIES;
register_param.sec_param.oob = SEC_PARAM_OOB;
register_param.sec_param.min_key_size = SEC_PARAM_MIN_KEY_SIZE;
register_param.sec_param.max_key_size = SEC_PARAM_MAX_KEY_SIZE;
register_param.sec_param.kdist_periph.enc = 1;
register_param.sec_param.kdist_periph.id = 1;
err_code = dm_register(&m_dm_app_id, ®ister_param);
APP_ERROR_CHECK(err_code);
}
开发者ID:451506709,项目名称:automated_machine,代码行数:39,代码来源:main.c
示例12: dmapi_init
void __init dmapi_init(void)
{
int ret;
ret = misc_register(&dmapi_dev);
if( ret != 0 )
printk(KERN_INFO "*** dmapi_init: misc_register returned %d\n", ret);
dm_init();
}
开发者ID:crossmeta,项目名称:sgi,代码行数:9,代码来源:dmapi_sysent.c
示例13: main
int main( void )
{
FILE* fp;
// Initialize platform first
if( platform_init() != PLATFORM_OK )
{
// This should never happen
while( 1 );
}
// Initialize device manager
dm_init();
// Register the ROM filesystem
dm_register( romfs_init() );
// Register the MMC filesystem
dm_register( mmcfs_init() );
// Register the remote filesystem
dm_register( remotefs_init() );
// Autorun: if "autorun.lua" is found in the file system, run it first
if( ( fp = fopen( FS_AUTORUN, "r" ) ) != NULL )
{
fclose( fp );
char* lua_argv[] = { "lua", FS_AUTORUN, NULL };
lua_main( 2, lua_argv );
}
#ifdef ELUA_BOOT_RPC
boot_rpc();
#else
// Run the shell
if( shell_init() == 0 )
{
printf( "Unable to initialize the eLua shell!\n" );
// Start Lua directly
char* lua_argv[] = { "lua", NULL };
lua_main( 1, lua_argv );
}
else
shell_start();
#endif // #ifdef ELUA_BOOT_RPC
#ifdef ELUA_SIMULATOR
hostif_exit(0);
return 0;
#else
while( 1 );
#endif
}
开发者ID:BackupTheBerlios,项目名称:elua-svn,代码行数:54,代码来源:main.c
示例14: dm_test_init
/* Get ready for testing */
static int dm_test_init(struct dm_test_state *dms)
{
memset(dms, '\0', sizeof(*dms));
gd->dm_root = NULL;
memset(dm_testdrv_op_count, '\0', sizeof(dm_testdrv_op_count));
ut_assertok(dm_init());
dms->root = dm_root();
return 0;
}
开发者ID:Android4SAM,项目名称:u-boot-at91,代码行数:12,代码来源:test-main.c
示例15: device_manager_init
/**@brief Function for initializing the Device Manager.
*
* @details Device manager is initialized here.
*/
static void device_manager_init(void)
{
dm_init_param_t init_param;
uint32_t err_code;
err_code = pstorage_init();
APP_ERROR_CHECK(err_code);
err_code = dm_init(&init_param);
APP_ERROR_CHECK(err_code);
}
开发者ID:BudzonMichal,项目名称:Wireless-sensor-network-Nordic-NRF51,代码行数:15,代码来源:main.c
示例16: main
int main( void )
{
int i;
FILE* fp;
// Initialize platform first
if( platform_init() != PLATFORM_OK )
{
// This should never happen
while( 1 );
}
// Initialize device manager
dm_init();
// Register the ROM filesystem
dm_register( romfs_init() );
// Register the MMC filesystem
dm_register( mmcfs_init() );
// Register the Semihosting filesystem
dm_register( semifs_init() );
// Search for autorun files in the defined order and execute the 1st if found
for( i = 0; i < sizeof( boot_order ) / sizeof( *boot_order ); i++ )
{
if( ( fp = fopen( boot_order[ i ], "r" ) ) != NULL )
{
fclose( fp );
char* picoc_argv[] = { "picoc", boot_order[i], NULL };
picoc_main( 2, picoc_argv );
break; // autoruns only the first found
}
}
// Run the shell
if( shell_init() == 0 )
{
// Start picoc directly
char* picoc_argv[] = { "picoc", NULL };
picoc_main( 1, picoc_argv );
}
else
shell_start();
while( 1 );
}
开发者ID:fjrti,项目名称:remix,代码行数:48,代码来源:main.c
示例17: kmain
/* This is the C kernel entry point */
void kmain(struct multiboot *mboot_header, addr_t initial_stack)
{
/* Store passed values, and initiate some early things
* We want serial log output as early as possible */
kernel_state_flags=0;
mtboot = mboot_header;
initial_boot_stack = initial_stack;
loader_parse_kernel_elf(mboot_header, &kernel_sections);
#if CONFIG_MODULES
loader_init_kernel_symbols();
#endif
serial_init();
cpu_early_init();
#if CONFIG_MODULES
loader_init_modules();
#endif
syscall_init();
fs_initrd_load(mtboot);
cpu_timer_install(1000);
cpu_processor_init_1();
/* Now get the management stuff going */
printk(1, "[kernel]: Starting system management\n");
mm_init(mtboot);
syslog_init();
parse_kernel_command_line((char *)(addr_t)mtboot->cmdline);
tm_init_multitasking();
dm_init();
fs_init();
net_init();
trace_init();
/* Load the rest... */
printk(KERN_MILE, "[kernel]: Kernel is setup (kv=%d, bpl=%d: ok)\n",
CONFIG_VERSION_NUMBER, BITS_PER_LONG);
printk(KERN_DEBUG, "[kernel]: structure sizes: process=%d bytes, thread=%d bytes, inode=%d bytes\n",
sizeof(struct process), sizeof(struct thread), sizeof(struct inode));
cpu_interrupt_set(1);
sys_setup();
cpu_processor_init_2();
timer_calibrate();
#if CONFIG_SMP
if(boot_cpus)
cpu_boot_all_aps();
#endif
tm_clone(0, __init_entry, 0);
sys_setsid();
kt_kernel_idle_task();
}
开发者ID:dbittman,项目名称:seakernel,代码行数:49,代码来源:main.c
示例18: main
int main( void )
{
int i;
FILE* fp;
// Initialize platform first
if( platform_init() != PLATFORM_OK )
{
// This should never happen
while( 1 );
}
// Initialize device manager
dm_init();
// Register the ROM filesystem
romfs_init();
// Register the MMC filesystem
mmcfs_init();
// Search for autorun files in the defined order and execute the 1st if found
for( i = 0; i < sizeof( boot_order ) / sizeof( *boot_order ); i++ )
{
if( ( fp = fopen( boot_order[ i ], "r" ) ) != NULL )
{
fclose( fp );
// The entry point for PicoLisp.
char* picolisp_argv[] = { "picolisp", boot_order[i], NULL };
picolisp_main( 2, picolisp_argv );
break; // autoruns only the first found
}
}
// Run the shell
if( shell_init() == 0 )
{
char* picolisp_argv[] = { "picolisp", NULL };
picolisp_main( 1, picolisp_argv );
}
else
{
shell_start();
}
while( 1 );
}
开发者ID:mounikamunipalli,项目名称:hempl,代码行数:48,代码来源:main.c
示例19: main
int main( void )
{
FILE* fp;
// Initialize platform first
if( platform_init() != PLATFORM_OK )
{
// This should never happen
while( 1 );
}
// Initialize device manager
dm_init();
// Register the ROM filesystem
dm_register( romfs_init() );
#ifdef BUILD_XMODEM
// Initialize XMODEM
xmodem_init( xmodem_send, xmodem_recv );
#endif
#ifdef BUILD_TERM
// Initialize terminal
term_init( TERM_LINES, TERM_COLS, term_out, term_in, term_translate );
#endif
// Autorun: if "autorun.lua" is found in the ROM file system, run it first
if( ( fp = fopen( "/rom/autorun.lua", "r" ) ) != NULL )
{
fclose( fp );
char* lua_argv[] = { "lua", "/rom/autorun.lua", NULL };
lua_main( 2, lua_argv );
}
// Run the shell
if( shell_init() == 0 )
{
printf( "Unable to initialize the eLua shell!\n" );
// Start Lua directly
char* lua_argv[] = { "lua", NULL };
lua_main( 1, lua_argv );
}
else
shell_start();
while( 1 );
}
开发者ID:BackupTheBerlios,项目名称:elua-svn,代码行数:48,代码来源:main.c
示例20: device_manager_init
/**@brief Function for the Device Manager initialization.
*
* @param[in] erase_bonds Indicates whether bonding information should be cleared from
* persistent storage during initialization of the Device Manager.
*/
static void device_manager_init(bool erase_bonds)
{
uint32_t err_code;
dm_init_param_t init_param = {.clear_persistent_data = erase_bonds};
dm_application_param_t register_param;
// Initialize persistent storage module.
err_code = pstorage_init();
if (err_code == NRF_SUCCESS)
debug_printf("Persistent storage module is ready!\r\n");
else
{
debug_printf("Ooops.. Something went wrong with initialising the PS module..\r\n");
APP_ERROR_CHECK(err_code);
}
err_code = dm_init(&init_param);
if (err_code == NRF_SUCCESS)
debug_printf("DM initialised!\r\n");
else
{
debug_printf("Ooops.. Something went wrong with initialising the DM..\r\n");
APP_ERROR_CHECK(err_code);
}
memset(®ister_param.sec_param, 0, sizeof(ble_gap_sec_params_t));
register_param.sec_param.bond = SEC_PARAM_BOND;
register_param.sec_param.mitm = SEC_PARAM_MITM;
register_param.sec_param.io_caps = SEC_PARAM_IO_CAPABILITIES;
register_param.sec_param.oob = SEC_PARAM_OOB;
register_param.sec_param.min_key_size = SEC_PARAM_MIN_KEY_SIZE;
register_param.sec_param.max_key_size = SEC_PARAM_MAX_KEY_SIZE;
register_param.evt_handler = device_manager_evt_handler;
register_param.service_type = DM_PROTOCOL_CNTXT_GATT_SRVR_ID;
err_code = dm_register(&m_app_handle, ®ister_param);
if (err_code == NRF_SUCCESS)
debug_printf("Registered parameters for DM!\r\n");
else
{
debug_printf("Ooops.. Something went wrong with registering the parameters for the DM..\r\n");
APP_ERROR_CHECK(err_code);
}
}
开发者ID:stelios26,项目名称:Aphrodite,代码行数:50,代码来源:main.c
注:本文中的dm_init函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论