Refactory of the proxy stubs code.
Added the IOBlks proxystub. Included reliance edge test. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@12019 110e8d01-0319-4d1e-a829-52ad28d1bb01
This commit is contained in:
parent
233d1b7416
commit
fe8665fe9e
|
@ -81,6 +81,11 @@
|
|||
<type>2</type>
|
||||
<locationURI>CHIBIOS/os/hal/boards/ATSAMA5D2_XULT_NSEC</locationURI>
|
||||
</link>
|
||||
<link>
|
||||
<name>lwip</name>
|
||||
<type>2</type>
|
||||
<locationURI>CHIBIOS/ext/lwip</locationURI>
|
||||
</link>
|
||||
<link>
|
||||
<name>os</name>
|
||||
<type>2</type>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
# Compiler options here.
|
||||
ifeq ($(USE_OPT),)
|
||||
USE_OPT = -O0 -ggdb -fomit-frame-pointer -falign-functions=16
|
||||
USE_OPT = -Og -ggdb -fomit-frame-pointer -falign-functions=16
|
||||
endif
|
||||
|
||||
# C specific options here (added to USE_OPT).
|
||||
|
@ -121,7 +121,7 @@ include $(CHIBIOS)/os/common/startup/ARM/compilers/GCC/mk/startup_sama5d2.mk
|
|||
# HAL-OSAL files (optional).
|
||||
include $(CHIBIOS)/os/hal/hal.mk
|
||||
include $(CHIBIOS)/os/hal/ports/SAMA/SAMA5D2x/platform.mk
|
||||
include $(CHIBIOS)/os/hal/boards/ATSAMA5D2_XULT_NSEC/board.mk
|
||||
include $(CHIBIOS)/os/hal/boards/BV1000GT_NSEC/board.mk
|
||||
include $(CHIBIOS)/os/hal/osal/rt/osal.mk
|
||||
# RTOS files (optional).
|
||||
include $(CHIBIOS)/os/rt/rt.mk
|
||||
|
@ -134,14 +134,17 @@ include $(CHIBIOS)/os/hal/lib/streams/streams.mk
|
|||
include lwip.mk
|
||||
|
||||
# Define linker script file here
|
||||
LDSCRIPT= $(STARTUPLD)/SAMA5D2ddr.ld
|
||||
LDSCRIPT= $(STARTUPLD)/SAMA5D2bvddr.ld
|
||||
|
||||
# C sources that can be compiled in ARM or THUMB mode depending on the global
|
||||
# setting.
|
||||
CSRC = $(ALLCSRC) \
|
||||
$(TESTSRC) \
|
||||
$(CHIBIOS)/os/various/evtimer.c \
|
||||
$(CHIBIOS)/os/various/reledge_bindings/SAMA5D2x/ch_sdmmc_reledge.c \
|
||||
daemons/tssockskel.c \
|
||||
daemons/tsdaemonskels.c \
|
||||
daemons/tsioblksskel.c \
|
||||
tsclient.c \
|
||||
lwipthread.c \
|
||||
main.c
|
||||
|
@ -176,6 +179,9 @@ ASMXSRC = $(ALLXASMSRC)
|
|||
|
||||
INCDIR = $(ALLINC) $(TESTINC) \
|
||||
$(LWINC) \
|
||||
$(CHIBIOS)/os/various/reledge_bindings/SAMA5D2x \
|
||||
$(CHIBIOS)/ext/reliance-edge/include \
|
||||
$(CHIBIOS)/ext/reliance-edge/os/chibios/include \
|
||||
$(CHIBIOS)/os/various
|
||||
|
||||
#
|
||||
|
@ -206,7 +212,7 @@ HEX = $(CP) -O ihex
|
|||
BIN = $(CP) -O binary
|
||||
|
||||
# ARM-specific options here
|
||||
AOPT =
|
||||
AOPT =
|
||||
|
||||
# THUMB-specific options here
|
||||
TOPT = -mthumb -DTHUMB
|
||||
|
@ -226,10 +232,10 @@ CPPWARN = -Wall -Wextra -Wundef
|
|||
#
|
||||
|
||||
# List all user C define here, like -D_DEBUG=1
|
||||
UDEFS =
|
||||
UDEFS =
|
||||
|
||||
# Define ASM defines here
|
||||
UADEFS =
|
||||
UADEFS =
|
||||
|
||||
# List all user directories here
|
||||
UINCDIR =
|
||||
|
|
|
@ -38,16 +38,43 @@
|
|||
#define SKEL_REQ_PUTRES 3
|
||||
#define SKEL_REQ_READY 4
|
||||
|
||||
#define STUB_OP_SOCKET 0
|
||||
#define STUB_OP_CLOSE 1
|
||||
#define STUB_OP_CONNECT 2
|
||||
#define STUB_OP_RECV 3
|
||||
#define STUB_OP_SEND 4
|
||||
#define STUB_OP_SELECT 5
|
||||
#define STUB_OP_BIND 6
|
||||
#define STUB_OP_LISTEN 7
|
||||
/* Sockets stub defines.*/
|
||||
#define SOCK_OP_SOCKET 0
|
||||
#define SOCK_OP_CLOSE 1
|
||||
#define SOCK_OP_CONNECT 2
|
||||
#define SOCK_OP_RECV 3
|
||||
#define SOCK_OP_SEND 4
|
||||
#define SOCK_OP_SELECT 5
|
||||
#define SOCK_OP_BIND 6
|
||||
#define SOCK_OP_LISTEN 7
|
||||
|
||||
#define EVT_F_SOCK_NEW_OP 1
|
||||
/* Socket new op event.*/
|
||||
#define EVT_F_SOCK_NEW_OP 1
|
||||
|
||||
/* Sockets stub service name.*/
|
||||
#define SOCKS_SVC_NAME "TsSocksStubService"
|
||||
|
||||
/* IOBlocks stub defines.*/
|
||||
#define IOBLKS_OP_OPEN 0
|
||||
#define IOBLKS_OP_CLOSE 1
|
||||
#define IOBLKS_OP_READ 2
|
||||
#define IOBLKS_OP_WRITE 3
|
||||
#define IOBLKS_OP_FLUSH 4
|
||||
|
||||
/* IOBlock new op event.*/
|
||||
#define EVT_F_IOBLK_NEW_OP 2
|
||||
|
||||
/* IOBlock stub service name.*/
|
||||
#define IOBLKS_SVC_NAME "TsIOBlksStubService"
|
||||
|
||||
/* Sector size.*/
|
||||
#define IOBLKS_SECT_SIZE 512U
|
||||
|
||||
/* Remote Partition size, in sectors.*/
|
||||
#define IOBLKS_PART_SIZE 96256U
|
||||
|
||||
/* Remote partition offset, in sectors.*/
|
||||
#define IOBLKS_PART_OFFS 952320U
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module pre-compile time settings. */
|
||||
|
@ -63,13 +90,16 @@
|
|||
/*===========================================================================*/
|
||||
/* Module data structures and types. */
|
||||
/*===========================================================================*/
|
||||
typedef struct skel_ctx skel_ctx_t;
|
||||
|
||||
typedef struct skel_req {
|
||||
uint32_t req; /* getop, cpyprms, putres */
|
||||
uint32_t stub_op;
|
||||
uint32_t stub_op_code;
|
||||
uint32_t stub_op_result;
|
||||
uint32_t stub_op_p_sz[METHOD_MAX_PARAMS];
|
||||
uint32_t stub_op_p[METHOD_MAX_PARAMS];
|
||||
uint32_t req; /* getop, cpyprms, putres */
|
||||
uint32_t stub_op;
|
||||
uint32_t stub_op_code;
|
||||
uint32_t stub_op_result;
|
||||
uint32_t stub_op_p_sz[METHOD_MAX_PARAMS];
|
||||
uint32_t stub_op_p[METHOD_MAX_PARAMS];
|
||||
skel_ctx_t *scp; /* the skeleton context this req come from.*/
|
||||
} skel_req_t;
|
||||
|
||||
/*===========================================================================*/
|
||||
|
|
|
@ -0,0 +1,123 @@
|
|||
/*
|
||||
ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file tsdaemonskel.c
|
||||
* @brief Common skeletons daemon for trusted clients.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "ch.h"
|
||||
#include "chobjfifos.h"
|
||||
#include "tsclient.h"
|
||||
#include "tsdaemonskels.h"
|
||||
#include <string.h>
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module local definitions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module exported variables. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module local types. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module local variables. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module local functions. */
|
||||
/*===========================================================================*/
|
||||
static inline msg_t invokeStubService(skel_req_t *skreqp) {
|
||||
msg_t r;
|
||||
|
||||
chMtxLock(&skreqp->scp->stub_svc_mtx);
|
||||
r = tsInvokeServiceNoYield(skreqp->scp->stub_svc,
|
||||
(ts_params_area_t)skreqp, sizeof *skreqp);
|
||||
chDbgAssert(r != SMC_SVC_BUSY, "Unexpected SMC_SVC_BUSY");
|
||||
chMtxUnlock(&skreqp->scp->stub_svc_mtx);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module exported functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Invoke the stubs service in order to copy the 'in'
|
||||
* parameters in the non secure memory space.
|
||||
*/
|
||||
void paramsInFromRemote(skel_req_t *skreqp) {
|
||||
skreqp->req = SKEL_REQ_CPYPRMS;
|
||||
(void) invokeStubService(skreqp);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Invoke the stubs service in order to copy the 'out'
|
||||
* parameters in the secure memory space and set the
|
||||
* remote call result.
|
||||
*/
|
||||
void returnToRemote(skel_req_t *skreqp, uint32_t res) {
|
||||
skreqp->stub_op_result = res;
|
||||
skreqp->req = SKEL_REQ_PUTRES;
|
||||
(void) invokeStubService(skreqp);
|
||||
chFifoReturnObject(&skreqp->scp->skel_req_fifo, skreqp);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Dispatch a request to a skeleton worker thread.
|
||||
*/
|
||||
THD_FUNCTION(TsSkelsDaemon, arg) {
|
||||
skel_ctx_t *skel_ctx = (skel_ctx_t *)arg;
|
||||
event_listener_t el;
|
||||
skel_req_t *skreqp;
|
||||
msg_t r;
|
||||
|
||||
chEvtRegisterMaskWithFlags(&stubsEventSource, &el, ALL_EVENTS,
|
||||
skel_ctx->skel_eventflag);
|
||||
chMtxObjectInit(&skel_ctx->stub_svc_mtx);
|
||||
skel_ctx->stub_svc = (ts_service_t)tsInvokeServiceNoYield(TS_HND_DISCOVERY,
|
||||
(ts_params_area_t)skel_ctx->stub_svc_name,
|
||||
strlen(skel_ctx->stub_svc_name) + 1);
|
||||
|
||||
/* Tell to stubs service that we are ready.*/
|
||||
skreqp = chFifoTakeObjectTimeout(&skel_ctx->skel_req_fifo, TIME_INFINITE);
|
||||
skreqp->req = SKEL_REQ_READY;
|
||||
skreqp->stub_op = skel_ctx->skel_eventflag;
|
||||
tsInvokeServiceNoYield(skel_ctx->stub_svc, (ts_params_area_t)skreqp,
|
||||
sizeof *skreqp);
|
||||
chFifoReturnObject(&skel_ctx->skel_req_fifo, skreqp);
|
||||
|
||||
/* Start to receive ops from stubs.*/
|
||||
for (;/* ever */;) {
|
||||
chEvtWaitAny(ALL_EVENTS);
|
||||
(void)chEvtGetAndClearFlags(&el);
|
||||
while (true) {
|
||||
skreqp = chFifoTakeObjectTimeout(&skel_ctx->skel_req_fifo, TIME_INFINITE);
|
||||
skreqp->req = SKEL_REQ_GETOP;
|
||||
skreqp->scp = skel_ctx;
|
||||
r = invokeStubService(skreqp);
|
||||
if (r == SMC_SVC_NHND)
|
||||
break;
|
||||
chFifoSendObject(&skel_ctx->skel_req_fifo, skreqp);
|
||||
}
|
||||
chFifoReturnObject(&skel_ctx->skel_req_fifo, skreqp);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,82 @@
|
|||
/*
|
||||
ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS.
|
||||
|
||||
ChibiOS 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 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file tsdaemonskels.h
|
||||
* @brief Common skeletons daemon macros and structures.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef TSDAEMONSKELS_H
|
||||
#define TSDAEMONSKELS_H
|
||||
|
||||
#include "ch.h"
|
||||
#include "ccportab.h"
|
||||
#include "tscommon.h"
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module constants. */
|
||||
/*===========================================================================*/
|
||||
#define N_MAX_SKEL_REQS 4
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module pre-compile time settings. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Derived constants and error checks. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module data structures and types. */
|
||||
/*===========================================================================*/
|
||||
|
||||
typedef struct skel_ctx {
|
||||
objects_fifo_t skel_req_fifo;
|
||||
msg_t skel_req_msgs[N_MAX_SKEL_REQS];
|
||||
skel_req_t skel_reqs[N_MAX_SKEL_REQS];
|
||||
eventflags_t skel_eventflag;
|
||||
ts_service_t stub_svc;
|
||||
mutex_t stub_svc_mtx;
|
||||
const char *stub_svc_name;
|
||||
} skel_ctx_t;
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module macros. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* External declarations. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
void paramsInFromRemote(skel_req_t *skreqp);
|
||||
void returnToRemote(skel_req_t *skreqp, uint32_t res);
|
||||
THD_FUNCTION(TsSkelsDaemon, arg);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module inline functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#endif /* TSDAEMONSKELS_H */
|
|
@ -0,0 +1,287 @@
|
|||
/*
|
||||
ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file tsioblksskel.c
|
||||
* @brief IOBlocks skeleton daemon for trusted clients.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "chobjfifos.h"
|
||||
#include "tsclient.h"
|
||||
#include "tsdaemonskels.h"
|
||||
#include "tsioblksskel.h"
|
||||
#include "dummyredconf.h"
|
||||
#include "rederrno.h"
|
||||
#include "redostypes.h"
|
||||
#include "redosserv.h"
|
||||
#include "sama_sdmmc_lld.h"
|
||||
#include "ch_sdmmc_device.h"
|
||||
#include "ch_sdmmc_cmds.h"
|
||||
#include "ch_sdmmc_sdio.h"
|
||||
#include "ch_sdmmc_sd.h"
|
||||
#include "ch_sdmmc_mmc.h"
|
||||
#include "ch_sdmmc_reledge.h"
|
||||
#include <string.h>
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module local definitions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module exported variables. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module local types. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module local variables. */
|
||||
/*===========================================================================*/
|
||||
static skel_ctx_t skel_ctx;
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module local functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @name IOBlocks API skeletons, in reliance edge fashion.
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief int red_open(uint8_t bVolNum, int mode)
|
||||
*/
|
||||
static void red_open(skel_req_t *skreqp) {
|
||||
REDSTATUS result = 0;
|
||||
uint32_t ulTries;
|
||||
eSDMMC_RC cs;
|
||||
SdmmcDriver *sdmmcp = NULL;
|
||||
uint8_t bVolNum;
|
||||
int mode;
|
||||
|
||||
bVolNum = (uint8_t)skreqp->stub_op_p[0];
|
||||
mode = (int)skreqp->stub_op_p[1];
|
||||
if (!sdmmcGetInstance(bVolNum, &sdmmcp))
|
||||
result = -RED_EINVAL;
|
||||
else {
|
||||
for (ulTries = 0U; ulTries < 20U; ulTries++) {
|
||||
cs = sd_mmc_test_unit_ready(sdmmcp);
|
||||
if ((cs == SDMMC_OK) && (cs != SDMMC_BUSY)){
|
||||
break;
|
||||
}
|
||||
chThdSleepMilliseconds(5);
|
||||
}
|
||||
|
||||
if (cs == SDMMC_OK) {
|
||||
if (mode != BDEV_O_RDONLY)
|
||||
if (sd_mmc_is_write_protected(sdmmcp))
|
||||
result = -RED_EROFS;
|
||||
} else
|
||||
result = -RED_EIO;
|
||||
}
|
||||
|
||||
/* report the result and copy the 'out' parameters.*/
|
||||
returnToRemote(skreqp, result);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief int red_close(uint8_t bVolNum)
|
||||
*/
|
||||
static void red_close(skel_req_t *skreqp) {
|
||||
int result;
|
||||
|
||||
result = 0;
|
||||
|
||||
/* report the result.*/
|
||||
returnToRemote(skreqp, result);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief int red_read(uint8_t bVolNum, uint32_t ulSectorStart, uint32_t ulSectorCount, void *pBuffer)
|
||||
*/
|
||||
static void red_read(skel_req_t *skreqp) {
|
||||
REDSTATUS result = 0;
|
||||
uint8_t bVolNum;
|
||||
uint32_t ulSectorStart;
|
||||
uint32_t ulSectorCount;
|
||||
void *mem;
|
||||
size_t len;
|
||||
|
||||
bVolNum = (uint8_t)skreqp->stub_op_p[0];
|
||||
ulSectorStart = (uint32_t)skreqp->stub_op_p[1] + IOBLKS_PART_OFFS;
|
||||
ulSectorCount = (uint32_t)skreqp->stub_op_p[2];
|
||||
len = ulSectorCount * IOBLKS_SECT_SIZE;
|
||||
|
||||
/* Allocate the space for the receive buffer.*/
|
||||
mem = chHeapAlloc(NULL, len);
|
||||
if (NULL == mem) {
|
||||
result = -RED_ENOMEM;
|
||||
len = 0;
|
||||
} else {
|
||||
SdmmcDriver *sdmmcp = NULL;
|
||||
eSDMMC_RC cs;
|
||||
|
||||
if (!sdmmcGetInstance(bVolNum, &sdmmcp)) {
|
||||
result = -RED_EINVAL;
|
||||
len = 0;
|
||||
} else {
|
||||
cs = SD_ReadBlocks(sdmmcp, ulSectorStart, mem, ulSectorCount);
|
||||
if(cs != SDMMC_OK) {
|
||||
result = -RED_EIO;
|
||||
len = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
skreqp->stub_op_p_sz[3] = len;
|
||||
skreqp->stub_op_p[3] = (uint32_t)mem;
|
||||
|
||||
/* report the result and copy 'out' parameter mem.*/
|
||||
returnToRemote(skreqp, result);
|
||||
if (NULL != mem)
|
||||
chHeapFree(mem);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief int red_write(uint8_t bVolNum, uint32_t ulSectorStart, uint32_t ulSectorCount, const void *pBuffer)
|
||||
*/
|
||||
static void red_write(skel_req_t *skreqp) {
|
||||
REDSTATUS result = 0;
|
||||
uint8_t bVolNum;
|
||||
uint32_t ulSectorStart;
|
||||
uint32_t ulSectorCount;
|
||||
void *dataptr;
|
||||
size_t size;
|
||||
|
||||
bVolNum = (uint8_t)skreqp->stub_op_p[0];
|
||||
ulSectorStart = (uint32_t)skreqp->stub_op_p[1] + IOBLKS_PART_OFFS;
|
||||
ulSectorCount = (uint32_t)skreqp->stub_op_p[2];
|
||||
size = ulSectorCount * IOBLKS_SECT_SIZE;
|
||||
|
||||
/* Allocate the space for the send buffer.*/
|
||||
dataptr = chHeapAlloc(NULL, size);
|
||||
if (NULL == dataptr) {
|
||||
result = -RED_ENOMEM;
|
||||
} else {
|
||||
SdmmcDriver *sdmmcp = NULL;
|
||||
eSDMMC_RC cs;
|
||||
|
||||
skreqp->stub_op_p[3] = (uint32_t)dataptr;
|
||||
|
||||
/* call the stub service in order to copy the
|
||||
'in' parameter dataptr.*/
|
||||
paramsInFromRemote(skreqp);
|
||||
|
||||
if (!sdmmcGetInstance(bVolNum, &sdmmcp)) {
|
||||
result = -RED_EINVAL;
|
||||
} else {
|
||||
cs = SD_WriteBlocks(sdmmcp, ulSectorStart, dataptr, ulSectorCount);
|
||||
if (cs != SDMMC_OK)
|
||||
result = -RED_EIO;
|
||||
}
|
||||
|
||||
chHeapFree(dataptr);
|
||||
}
|
||||
|
||||
/* report the result.*/
|
||||
returnToRemote(skreqp, result);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief red_flush(uint8_t bVolNum);
|
||||
*/
|
||||
static void red_flush(skel_req_t *skreqp) {
|
||||
REDSTATUS result = 0;
|
||||
uint8_t bVolNum;
|
||||
eSDMMC_RC cs;
|
||||
SdmmcDriver *sdmmcp = NULL;
|
||||
|
||||
bVolNum = (uint8_t)skreqp->stub_op_p[0];
|
||||
if (!sdmmcGetInstance(bVolNum, &sdmmcp))
|
||||
result = -RED_EINVAL;
|
||||
else {
|
||||
cs = sd_mmc_test_unit_ready(sdmmcp);
|
||||
if(cs != SDMMC_OK)
|
||||
result = -RED_EIO;
|
||||
}
|
||||
|
||||
/* Report the result.*/
|
||||
returnToRemote(skreqp, result);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief IOBlocks Daemon. Dispatch a request to the corresponding
|
||||
* local method.
|
||||
*/
|
||||
static THD_FUNCTION(TsIOBlksSkelDaemon, arg) {
|
||||
objects_fifo_t *ofp = arg;
|
||||
skel_req_t *skreqp;
|
||||
|
||||
for (;/* ever */;) {
|
||||
chFifoReceiveObjectTimeout(ofp, (void **)&skreqp,
|
||||
TIME_INFINITE);
|
||||
switch (skreqp->stub_op_code) {
|
||||
case IOBLKS_OP_OPEN:
|
||||
red_open(skreqp);
|
||||
break;
|
||||
case IOBLKS_OP_CLOSE:
|
||||
red_close(skreqp);
|
||||
break;
|
||||
case IOBLKS_OP_READ:
|
||||
red_read(skreqp);
|
||||
break;
|
||||
case IOBLKS_OP_WRITE:
|
||||
red_write(skreqp);
|
||||
break;
|
||||
case IOBLKS_OP_FLUSH:
|
||||
red_flush(skreqp);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module exported functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Init the IOBlocks skeleton daemon objects and create the
|
||||
* corresponding threads.
|
||||
*/
|
||||
void tsIOBlksSkelInit(void) {
|
||||
int i;
|
||||
skel_ctx_t *scp;
|
||||
|
||||
scp = &skel_ctx;
|
||||
chFifoObjectInit(&scp->skel_req_fifo, sizeof (skel_req_t), N_MAX_SKEL_REQS,
|
||||
sizeof (uint8_t), scp->skel_reqs, scp->skel_req_msgs);
|
||||
scp->skel_eventflag = EVT_F_IOBLK_NEW_OP;
|
||||
scp->stub_svc_name = IOBLKS_SVC_NAME;
|
||||
|
||||
for (i = 0; i < N_IOBLKSKEL_THD; ++i)
|
||||
chThdCreateFromHeap(NULL, 2048, "TsIOBlksSkelDaemonWrk", NORMALPRIO,
|
||||
TsIOBlksSkelDaemon, &scp->skel_req_fifo);
|
||||
chThdCreateFromHeap(NULL, 2048, "TsIOBlksSkelDaemon", NORMALPRIO,
|
||||
TsSkelsDaemon, scp);
|
||||
}
|
||||
|
||||
/** @} */
|
|
@ -0,0 +1,70 @@
|
|||
/*
|
||||
ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS.
|
||||
|
||||
ChibiOS 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 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file tsioblksskel.h
|
||||
* @brief IOBlocks skeleton module macros and structures.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef TSIOBLKSSKEL_H
|
||||
#define TSIOBLKSSKEL_H
|
||||
|
||||
#include "ch.h"
|
||||
#include "ccportab.h"
|
||||
#include "tscommon.h"
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module constants. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module pre-compile time settings. */
|
||||
/*===========================================================================*/
|
||||
#define N_IOBLKSKEL_THD 4
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Derived constants and error checks. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module data structures and types. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module macros. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* External declarations. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
void tsIOBlksSkelInit(void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module inline functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#endif /* TSIOBLKSSKEL_H */
|
|
@ -23,6 +23,7 @@
|
|||
#include "ch.h"
|
||||
#include "chobjfifos.h"
|
||||
#include "tsclient.h"
|
||||
#include "tsdaemonskels.h"
|
||||
#include "tssockskel.h"
|
||||
#include <string.h>
|
||||
|
||||
|
@ -41,52 +42,12 @@
|
|||
/*===========================================================================*/
|
||||
/* Module local variables. */
|
||||
/*===========================================================================*/
|
||||
|
||||
static ts_service_t tsStubsService = NULL;
|
||||
static MUTEX_DECL(tsStubsServiceMtx);
|
||||
|
||||
static objects_fifo_t skel_req_fifo;
|
||||
static msg_t skel_req_msgs[N_SOCKSKEL_THD];
|
||||
static skel_req_t skel_reqs[N_SOCKSKEL_THD] = {0};
|
||||
static skel_ctx_t skel_ctx;
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module local functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Invoke the stubs service in order to copy the 'in'
|
||||
* parameters in the non secure memory space.
|
||||
*/
|
||||
static void paramsInFromRemote(skel_req_t *skreqp) {
|
||||
msg_t r;
|
||||
|
||||
skreqp->req = SKEL_REQ_CPYPRMS;
|
||||
chMtxLock(&tsStubsServiceMtx);
|
||||
r = tsInvokeServiceNoYield(tsStubsService,
|
||||
(ts_params_area_t)skreqp, sizeof *skreqp);
|
||||
chDbgAssert(r != SMC_SVC_BUSY, "Unexpected SMC_SVC_BUSY");
|
||||
chMtxUnlock(&tsStubsServiceMtx);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Invoke the stubs service in order to copy the 'out'
|
||||
* parameters in the secure memory space and set the
|
||||
* remote call result.
|
||||
*/
|
||||
static void returnToRemote(skel_req_t *skreqp, uint32_t res) {
|
||||
msg_t r;
|
||||
|
||||
skreqp->stub_op_result = res;
|
||||
skreqp->req = SKEL_REQ_PUTRES;
|
||||
|
||||
chMtxLock(&tsStubsServiceMtx);
|
||||
r = tsInvokeServiceNoYield(tsStubsService,
|
||||
(ts_params_area_t)skreqp, sizeof *skreqp);
|
||||
chDbgAssert(r != SMC_SVC_BUSY, "Unexpected SMC_SVC_BUSY");
|
||||
chMtxUnlock(&tsStubsServiceMtx);
|
||||
chFifoReturnObject(&skel_req_fifo, skreqp);
|
||||
}
|
||||
|
||||
/**
|
||||
* @name Sockets API skeletons.
|
||||
* @{
|
||||
|
@ -273,46 +234,39 @@ static void l_listen(skel_req_t *skreqp) {
|
|||
returnToRemote(skreqp, result);
|
||||
}
|
||||
|
||||
/** @} */
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module exported functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Dispatch a request to a local method.
|
||||
* @brief Socket Daemon. Dispatch a request to a local method.
|
||||
*/
|
||||
static THD_FUNCTION(TsSockSkelDaemon, arg) {
|
||||
(void)arg;
|
||||
|
||||
objects_fifo_t *ofp = arg;
|
||||
skel_req_t *skreqp;
|
||||
|
||||
for (;/* ever */;) {
|
||||
chFifoReceiveObjectTimeout(&skel_req_fifo, (void **)&skreqp,
|
||||
chFifoReceiveObjectTimeout(ofp, (void **)&skreqp,
|
||||
TIME_INFINITE);
|
||||
switch (skreqp->stub_op_code) {
|
||||
case STUB_OP_SOCKET:
|
||||
case SOCK_OP_SOCKET:
|
||||
l_socket(skreqp);
|
||||
break;
|
||||
case STUB_OP_CONNECT:
|
||||
case SOCK_OP_CONNECT:
|
||||
l_connect(skreqp);
|
||||
break;
|
||||
case STUB_OP_CLOSE:
|
||||
case SOCK_OP_CLOSE:
|
||||
l_close(skreqp);
|
||||
break;
|
||||
case STUB_OP_RECV:
|
||||
case SOCK_OP_RECV:
|
||||
l_recv(skreqp);
|
||||
break;
|
||||
case STUB_OP_SEND:
|
||||
case SOCK_OP_SEND:
|
||||
l_send(skreqp);
|
||||
break;
|
||||
case STUB_OP_SELECT:
|
||||
case SOCK_OP_SELECT:
|
||||
l_select(skreqp);
|
||||
break;
|
||||
case STUB_OP_BIND:
|
||||
case SOCK_OP_BIND:
|
||||
l_bind(skreqp);
|
||||
break;
|
||||
case STUB_OP_LISTEN:
|
||||
case SOCK_OP_LISTEN:
|
||||
l_listen(skreqp);
|
||||
break;
|
||||
default:
|
||||
|
@ -321,62 +275,29 @@ static THD_FUNCTION(TsSockSkelDaemon, arg) {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Dispatch a request to a skeleton worker thread.
|
||||
*/
|
||||
static THD_WORKING_AREA(waTsSkelsDaemon, 512);
|
||||
static THD_FUNCTION(TsSkelsDaemon, arg) {
|
||||
(void)arg;
|
||||
|
||||
event_listener_t el;
|
||||
skel_req_t *skreqp;
|
||||
msg_t r;
|
||||
|
||||
chEvtRegisterMaskWithFlags(&stubsEventSource, &el, ALL_EVENTS,
|
||||
EVT_F_SOCK_NEW_OP);
|
||||
tsStubsService = (ts_service_t)tsInvokeServiceNoYield(TS_HND_DISCOVERY,
|
||||
(ts_params_area_t)"TsStubsService", sizeof "TsStubsService");
|
||||
|
||||
/* Tell to stubs service that we are ready.*/
|
||||
skreqp = chFifoTakeObjectTimeout(&skel_req_fifo, TIME_INFINITE);
|
||||
skreqp->req = SKEL_REQ_READY;
|
||||
tsInvokeServiceNoYield(tsStubsService, (ts_params_area_t)skreqp,
|
||||
sizeof *skreqp);
|
||||
chFifoReturnObject(&skel_req_fifo, skreqp);
|
||||
|
||||
/* Start to receive ops from stubs.*/
|
||||
for (;/* ever */;) {
|
||||
chEvtWaitAny(ALL_EVENTS);
|
||||
(void)chEvtGetAndClearFlags(&el);
|
||||
while (true) {
|
||||
skreqp = chFifoTakeObjectTimeout(&skel_req_fifo, TIME_INFINITE);
|
||||
skreqp->req = SKEL_REQ_GETOP;
|
||||
chMtxLock(&tsStubsServiceMtx);
|
||||
r = tsInvokeServiceNoYield(tsStubsService, (ts_params_area_t)skreqp,
|
||||
sizeof *skreqp);
|
||||
chDbgAssert(r != SMC_SVC_BUSY, "Unexpected SMC_SVC_BUSY");
|
||||
chMtxUnlock(&tsStubsServiceMtx);
|
||||
if (r == SMC_SVC_NHND)
|
||||
break;
|
||||
chFifoSendObject(&skel_req_fifo, skreqp);
|
||||
}
|
||||
chFifoReturnObject(&skel_req_fifo, skreqp);
|
||||
}
|
||||
}
|
||||
/*===========================================================================*/
|
||||
/* Module exported functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Init the skeletons daemon objects and create the
|
||||
* @brief Init the socket skeletons daemon objects and create the
|
||||
* corresponding threads.
|
||||
*/
|
||||
void tsSkelsDaemonInit(void) {
|
||||
void tsSocksSkelInit(void) {
|
||||
int i;
|
||||
skel_ctx_t *scp;
|
||||
|
||||
chFifoObjectInit(&skel_req_fifo, sizeof (skel_req_t), N_SOCKSKEL_THD,
|
||||
sizeof (uint8_t), skel_reqs, skel_req_msgs);
|
||||
scp = &skel_ctx;
|
||||
chFifoObjectInit(&scp->skel_req_fifo, sizeof (skel_req_t), N_MAX_SKEL_REQS,
|
||||
sizeof (uint8_t), scp->skel_reqs, scp->skel_req_msgs);
|
||||
scp->skel_eventflag = EVT_F_SOCK_NEW_OP;
|
||||
scp->stub_svc_name = SOCKS_SVC_NAME;
|
||||
|
||||
for (i = 0; i < N_SOCKSKEL_THD; ++i)
|
||||
chThdCreateFromHeap(NULL, 2048, "TsSkelDaemonWrk", NORMALPRIO,
|
||||
TsSockSkelDaemon, NULL);
|
||||
chThdCreateStatic(waTsSkelsDaemon, sizeof waTsSkelsDaemon, NORMALPRIO,
|
||||
TsSkelsDaemon, NULL);
|
||||
chThdCreateFromHeap(NULL, 2048, "TsSockSkelDaemonWrk", NORMALPRIO,
|
||||
TsSockSkelDaemon, &scp->skel_req_fifo);
|
||||
chThdCreateFromHeap(NULL, 2048, "TsSocksSkelDaemon", NORMALPRIO,
|
||||
TsSkelsDaemon, scp);
|
||||
}
|
||||
|
||||
/** @} */
|
||||
|
|
|
@ -65,7 +65,7 @@
|
|||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
void tsSkelsDaemonInit(void);
|
||||
void tsSocksSkelInit(void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -0,0 +1,114 @@
|
|||
/* THIS FILE WAS GENERATED BY THE DATALIGHT RELIANCE EDGE CONFIGURATION
|
||||
UTILITY. DO NOT MODIFY.
|
||||
|
||||
Generated by configuration utility version 2.02
|
||||
*/
|
||||
/** @file
|
||||
*/
|
||||
#ifndef REDCONF_H
|
||||
#define REDCONF_H
|
||||
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#define REDCONF_READ_ONLY 0
|
||||
|
||||
#define REDCONF_API_POSIX 1
|
||||
|
||||
#define REDCONF_API_FSE 0
|
||||
|
||||
#define REDCONF_API_POSIX_FORMAT 1
|
||||
|
||||
#define REDCONF_API_POSIX_LINK 1
|
||||
|
||||
#define REDCONF_API_POSIX_UNLINK 1
|
||||
|
||||
#define REDCONF_API_POSIX_MKDIR 1
|
||||
|
||||
#define REDCONF_API_POSIX_RMDIR 1
|
||||
|
||||
#define REDCONF_API_POSIX_RENAME 1
|
||||
|
||||
#define REDCONF_RENAME_ATOMIC 1
|
||||
|
||||
#define REDCONF_API_POSIX_FTRUNCATE 1
|
||||
|
||||
#define REDCONF_API_POSIX_READDIR 1
|
||||
|
||||
#define REDCONF_API_POSIX_CWD 0
|
||||
|
||||
#define REDCONF_NAME_MAX 12U
|
||||
|
||||
#define REDCONF_PATH_SEPARATOR '/'
|
||||
|
||||
#define REDCONF_TASK_COUNT 10U
|
||||
|
||||
#define REDCONF_HANDLE_COUNT 10U
|
||||
|
||||
#define REDCONF_API_FSE_FORMAT 0
|
||||
|
||||
#define REDCONF_API_FSE_TRUNCATE 0
|
||||
|
||||
#define REDCONF_API_FSE_TRANSMASKGET 0
|
||||
|
||||
#define REDCONF_API_FSE_TRANSMASKSET 0
|
||||
|
||||
#define REDCONF_OUTPUT 0
|
||||
|
||||
#define REDCONF_ASSERTS 1
|
||||
|
||||
#define REDCONF_BLOCK_SIZE 512U
|
||||
|
||||
#define REDCONF_VOLUME_COUNT 1U
|
||||
|
||||
#define REDCONF_ENDIAN_BIG 0
|
||||
|
||||
#define REDCONF_ALIGNMENT_SIZE 4U
|
||||
|
||||
#define REDCONF_CRC_ALGORITHM CRC_SLICEBY8
|
||||
|
||||
#define REDCONF_INODE_BLOCKS 1
|
||||
|
||||
#define REDCONF_INODE_TIMESTAMPS 1
|
||||
|
||||
#define REDCONF_ATIME 0
|
||||
|
||||
#define REDCONF_DIRECT_POINTERS 4U
|
||||
|
||||
#define REDCONF_INDIRECT_POINTERS 32U
|
||||
|
||||
#define REDCONF_BUFFER_COUNT 12U
|
||||
|
||||
#define RedMemCpyUnchecked memcpy
|
||||
|
||||
#define RedMemMoveUnchecked memmove
|
||||
|
||||
#define RedMemSetUnchecked memset
|
||||
|
||||
#define RedMemCmpUnchecked memcmp
|
||||
|
||||
#define RedStrLenUnchecked strlen
|
||||
|
||||
#define RedStrCmpUnchecked strcmp
|
||||
|
||||
#define RedStrNCmpUnchecked strncmp
|
||||
|
||||
#define RedStrNCpyUnchecked strncpy
|
||||
|
||||
#define REDCONF_TRANSACT_DEFAULT (( RED_TRANSACT_CREAT | RED_TRANSACT_MKDIR | RED_TRANSACT_RENAME | RED_TRANSACT_LINK | RED_TRANSACT_UNLINK | RED_TRANSACT_FSYNC | RED_TRANSACT_CLOSE | RED_TRANSACT_VOLFULL | RED_TRANSACT_UMOUNT ) & RED_TRANSACT_MASK)
|
||||
|
||||
#define REDCONF_IMAP_INLINE 0
|
||||
|
||||
#define REDCONF_IMAP_EXTERNAL 1
|
||||
|
||||
#define REDCONF_DISCARDS 0
|
||||
|
||||
#define REDCONF_IMAGE_BUILDER 0
|
||||
|
||||
#define REDCONF_CHECKER 0
|
||||
|
||||
#define RED_CONFIG_UTILITY_VERSION 0x2000200U
|
||||
|
||||
#define RED_CONFIG_MINCOMPAT_VER 0x1000200U
|
||||
|
||||
#endif
|
|
@ -18,10 +18,12 @@
|
|||
#include "hal.h"
|
||||
#include "tsclient.h"
|
||||
#include "daemons/tssockskel.h"
|
||||
#include "daemons/tsioblksskel.h"
|
||||
#include "rt_test_root.h"
|
||||
#include "oslib_test_root.h"
|
||||
#include "chprintf.h"
|
||||
#include "lwipthread.h"
|
||||
#include "sama_sdmmc_lld.h"
|
||||
|
||||
/*
|
||||
* LED blinker thread, times are in milliseconds.
|
||||
|
@ -33,17 +35,17 @@ static THD_FUNCTION(Thread1, arg) {
|
|||
chRegSetThreadName("blinker");
|
||||
|
||||
while (true) {
|
||||
palToggleLine(LINE_LED_RED);
|
||||
palToggleLine(LINE_KEYBACK_LED_RED);
|
||||
chThdSleepMilliseconds(80);
|
||||
palToggleLine(LINE_LED_RED);
|
||||
palToggleLine(LINE_KEYBACK_LED_RED);
|
||||
chThdSleepMilliseconds(120);
|
||||
palToggleLine(LINE_LED_RED);
|
||||
palToggleLine(LINE_KEYBACK_LED_RED);
|
||||
chThdSleepMilliseconds(120);
|
||||
palToggleLine(LINE_LED_RED);
|
||||
palToggleLine(LINE_KEYBACK_LED_RED);
|
||||
chThdSleepMilliseconds(120);
|
||||
palToggleLine(LINE_LED_RED);
|
||||
palToggleLine(LINE_KEYBACK_LED_RED);
|
||||
chThdSleepMilliseconds(160);
|
||||
palToggleLine(LINE_LED_RED);
|
||||
palToggleLine(LINE_KEYBACK_LED_RED);
|
||||
chThdSleepMilliseconds(600);
|
||||
}
|
||||
}
|
||||
|
@ -54,6 +56,31 @@ static const SerialConfig sdcfg = {
|
|||
UART_MR_PAR_NO
|
||||
};
|
||||
|
||||
#define BLOCK_CNT_MAX 32u
|
||||
#define DMADL_CNT_MAX 64u
|
||||
#define BLOCK_CNT 3u
|
||||
|
||||
CACHE_ALIGNED uint8_t data_buf[BLOCK_CNT_MAX * 512ul];
|
||||
CACHE_ALIGNED static uint32_t dma_table[DMADL_CNT_MAX * SDMMC_DMADL_SIZE];
|
||||
CACHE_ALIGNED uint8_t sdmmcbuffer[ROUND_UP_MULT(SDMMC_BUFFER_SIZE, L1_CACHE_BYTES)];
|
||||
|
||||
static const SamaSDMMCConfig sdmmc_cfg = {
|
||||
SDMMC_SLOT0,
|
||||
sdmmcbuffer,
|
||||
data_buf,
|
||||
sizeof data_buf,
|
||||
dma_table,
|
||||
DMADL_CNT_MAX
|
||||
};
|
||||
|
||||
bool sdmmcGetInstance(uint8_t index, SdmmcDriver **sdmmcp)
|
||||
{
|
||||
(void)index;
|
||||
|
||||
*sdmmcp = &SDMMCD1;
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* Application entry point.
|
||||
*/
|
||||
|
@ -73,25 +100,38 @@ int main(void) {
|
|||
/*
|
||||
* Activates the serial driver 0 using the driver default configuration.
|
||||
*/
|
||||
sdStart(&SD0, &sdcfg);
|
||||
sdStart(&SD1, &sdcfg);
|
||||
|
||||
/*
|
||||
* Creates the blinker thread.
|
||||
*/
|
||||
chThdCreateStatic(waThread1, sizeof waThread1, NORMALPRIO-1, Thread1, NULL);
|
||||
|
||||
tsSkelsDaemonInit();
|
||||
/*
|
||||
* Init and open the sdmmc device.
|
||||
*/
|
||||
sdmmcInit();
|
||||
sdmmcStart(&SDMMCD1, &sdmmc_cfg);
|
||||
if (SDMMCD1.state != MCID_INIT_ERROR) {
|
||||
sdmmcOpenDevice(&SDMMCD1);
|
||||
} else {
|
||||
chprintf((BaseSequentialStream *)&SD1, "Cannot start sdmmc device.\r\n");
|
||||
sdmmcStop(&SDMMCD1);
|
||||
}
|
||||
|
||||
tsSocksSkelInit();
|
||||
tsIOBlksSkelInit();
|
||||
|
||||
/*
|
||||
* Call the dummy secure service
|
||||
*/
|
||||
chprintf((BaseSequentialStream*)&SD0, "Calling the secure service\n\r");
|
||||
chprintf((BaseSequentialStream*)&SD1, "Calling the secure service\n\r");
|
||||
|
||||
/* Retrieve the service handle by name */
|
||||
tssvc = (ts_service_t) tsInvokeServiceNoYield(TS_HND_DISCOVERY,
|
||||
(ts_params_area_t)"TsSimpleService", sizeof "TsSimpleService");
|
||||
if ((int32_t)tssvc < 0) {
|
||||
chprintf((BaseSequentialStream*)&SD0, "Cannot get the handle of '%s': %d\r\n",
|
||||
chprintf((BaseSequentialStream*)&SD1, "Cannot get the handle of '%s': %d\r\n",
|
||||
"TsSimpleService", tssvc);
|
||||
}
|
||||
/*
|
||||
|
@ -103,11 +143,11 @@ int main(void) {
|
|||
|
||||
/* Invoke the service */
|
||||
r = tsInvokeServiceNoYield(tssvc, (ts_params_area_t)"HELO", sizeof "HELO");
|
||||
chprintf((BaseSequentialStream*)&SD0, "Call result: %d\r\n", r);
|
||||
chprintf((BaseSequentialStream*)&SD1, "Call result: %d\r\n", r);
|
||||
#if 0
|
||||
if(!palReadPad(PIOB, PIOB_USER_PB)) {
|
||||
test_execute((BaseSequentialStream *)&SD0, &rt_test_suite);
|
||||
test_execute((BaseSequentialStream *)&SD0, &oslib_test_suite);
|
||||
test_execute((BaseSequentialStream *)&SD1, &rt_test_suite);
|
||||
test_execute((BaseSequentialStream *)&SD1, &oslib_test_suite);
|
||||
}
|
||||
#endif
|
||||
chThdSleepMilliseconds(500);
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
#define SAMA_MCK_SEL SAMA_MCK_PLLA_CLK
|
||||
#define SAMA_MCK_PRES_VALUE 1
|
||||
#define SAMA_MCK_MDIV_VALUE 3
|
||||
#define SAMA_PLLA_MUL_VALUE 83
|
||||
#define SAMA_PLLA_MUL_VALUE 41
|
||||
#define SAMA_PLLADIV2_EN TRUE
|
||||
#define SAMA_H64MX_H32MX_RATIO 2
|
||||
|
||||
|
@ -57,8 +57,8 @@
|
|||
/*
|
||||
* SERIAL driver system settings.
|
||||
*/
|
||||
#define SAMA_SERIAL_USE_UART0 TRUE
|
||||
#define SAMA_SERIAL_USE_UART1 FALSE
|
||||
#define SAMA_SERIAL_USE_UART0 FALSE
|
||||
#define SAMA_SERIAL_USE_UART1 TRUE
|
||||
#define SAMA_SERIAL_USE_UART2 FALSE
|
||||
#define SAMA_SERIAL_USE_UART3 FALSE
|
||||
#define SAMA_SERIAL_USE_UART4 FALSE
|
||||
|
@ -95,6 +95,11 @@
|
|||
#define SAMA_TC0_IRQ_PRIORITY 2
|
||||
#define SAMA_TC1_IRQ_PRIORITY 2
|
||||
|
||||
/*
|
||||
* TRNG driver system settings.
|
||||
*/
|
||||
#define HAL_USE_TRNG FALSE
|
||||
|
||||
/*
|
||||
* SECUMOD driver settings.
|
||||
*/
|
||||
|
@ -103,8 +108,8 @@
|
|||
/*
|
||||
* SDMMC driver settings.
|
||||
*/
|
||||
#define HAL_USE_SDMMC FALSE
|
||||
|
||||
#define HAL_USE_SDMMC TRUE
|
||||
#define PLATFORM_SDMMC_USE_SDMMC1 TRUE
|
||||
/*
|
||||
* UART driver system settings.
|
||||
*/
|
||||
|
@ -140,4 +145,10 @@
|
|||
#define SAMA_UART_FLEXCOM4_DMA_IRQ_PRIORITY 4
|
||||
#define SAMA_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
|
||||
|
||||
/*
|
||||
* L2CC related defines.
|
||||
*/
|
||||
#define SAMA_L2CC_ASSUME_ENABLED 1
|
||||
#define SAMA_L2CC_ENABLE 0
|
||||
|
||||
#endif /* MCUCONF_H */
|
||||
|
|
Loading…
Reference in New Issue