Ejemplo n.º 1
0
/* #[<ENTRY_FUNC>]# eEnt_func22
 * name:         eEnt_func22
 * global_name:  tSimpleServer_eEnt_func22
 * oneway:       false
 * #[</ENTRY_FUNC>]# */
ER
eEnt_func22(CELLIDX idx, STA* sta)
{
	ER		ercd = E_OK;
	CELLCB	*p_cellcb;
	if (VALID_IDX(idx)) {
		p_cellcb = GET_CELLCB(idx);
	}
	else {
		return(E_ID);
	}

	/* ここに処理本体を記述します #_TEFB_# */
	syslog( LOG_INFO, "SimpleServer: eEnt_func22" );
	syslog( LOG_INFO, "  sta->a = %d", sta->a );
	syslog( LOG_INFO, "  sta->b = %d", sta->b );

	EENT_FUNC22_STA_DEALLOC( sta );
	return(ercd);
}
Ejemplo n.º 2
0
/* #[<ENTRY_FUNC>]# eEnt_func27
 * name:         eEnt_func27
 * global_name:  tSimpleServer_eEnt_func27
 * oneway:       false
 * #[</ENTRY_FUNC>]# */
ER
eEnt_func27(CELLIDX idx, int8_t(* array2)[8])
{
	ER		ercd = E_OK;
	int_t	i;
	CELLCB	*p_cellcb;
	if (VALID_IDX(idx)) {
		p_cellcb = GET_CELLCB(idx);
	}
	else {
		return(E_ID);
	}

	/* ここに処理本体を記述します #_TEFB_# */
	syslog( LOG_INFO, "eEnt_func27" );
	for( i = 0; i < ArraySize; i++ )
		syslog( LOG_INFO, "(*array2)[%d]=%d", i, (*array2)[i] );
	EENT_FUNC27_ARRAY2_DEALLOC( array2 );
	return(ercd);
}
Ejemplo n.º 3
0
/* #[<ENTRY_FUNC>]# eEnt_func34
 * name:         eEnt_func34
 * global_name:  tSimpleServer_eEnt_func34
 * oneway:       false
 * #[</ENTRY_FUNC>]# */
ER
eEnt_func34(CELLIDX idx, char_t** msg, int32_t* len)
{
	ER		ercd = E_OK;
	CELLCB	*p_cellcb;
	if (VALID_IDX(idx)) {
		p_cellcb = GET_CELLCB(idx);
	}
	else {
		return(E_ID);
	}

	/* ここに処理本体を記述します #_TEFB_# */
#define  FUNC34_MSG		"The temparature & humidity is just confortable."
	*len = sizeof FUNC34_MSG;
	eEnt_func34_msg_alloc( *len, (void **)msg );
	strcpy( *msg, FUNC34_MSG );

	return(ercd);
}
Ejemplo n.º 4
0
/* #[<ENTRY_FUNC>]# eEnt_func7
 * name:         eEnt_func7
 * global_name:  tSimpleServer_eEnt_func7
 * oneway:       false
 * #[</ENTRY_FUNC>]# */
ER
eEnt_func7(CELLIDX idx, const int8_t array2[8][4])
{
	ER		ercd = E_OK;
	CELLCB	*p_cellcb;
	int_t	i, j;
	if (VALID_IDX(idx)) {
		p_cellcb = GET_CELLCB(idx);
	}
	else {
		return(E_ID);
	}

	/* ここに処理本体を記述します #_TEFB_# */
	for( i = 0; i < ArraySize; i++ )
		for( j = 0; j < ArraySize2; j++ )
			syslog( LOG_INFO, "array2[%d][%d]=%d", i, j, array2[i][j] );

	return(ercd);
}
Ejemplo n.º 5
0
/* #[<ENTRY_FUNC>]# eEnt_func6
 * name:         eEnt_func6
 * global_name:  tSimpleServer_eEnt_func6
 * oneway:       false
 * #[</ENTRY_FUNC>]# */
ER
eEnt_func6(CELLIDX idx, const int8_t array[8])
{
	ER		ercd = E_OK;
	CELLCB	*p_cellcb;
	int_t	i;
	if (VALID_IDX(idx)) {
		p_cellcb = GET_CELLCB(idx);
	}
	else {
		return(E_ID);
	}

	/* ここに処理本体を記述します #_TEFB_# */
	syslog( LOG_INFO, "eEnt_func6" );
	for( i = 0; i < ArraySize; i++ )
		syslog( LOG_INFO, "array[%d]=%d", i, array[i]);

	return(ercd);
}
/*
 *  シリアルポートへの文字列送信(受け口関数)
 */
ER_UINT
eSerialPort_write(CELLIDX idx, const char *buffer, uint_t length)
{
	CELLCB	*p_cellcb;
	bool_t	buffer_full;
	uint_t	wricnt = 0U;
	ER		ercd, rercd;

	if (sns_dpn()) {				/* コンテキストのチェック */
		return(E_CTX);
	}
	if (!VALID_IDX(idx)) {			/* ポート番号のチェック */
		return(E_ID);
	}

	p_cellcb = GET_CELLCB(idx);
	if (!VAR_openFlag) {			/* オープン済みかのチェック */
		return(E_OBJ);
	}
	if (VAR_errorFlag) {			/* エラー状態かのチェック */
		return(E_SYS);
	}

	buffer_full = true;				/* ループの1回めはwai_semする */
	while (wricnt < length) {
		if (buffer_full) {
			SVC(rercd = cSendSemaphore_wait(),
										gen_ercd_wait(rercd, p_cellcb));
		}
		SVC(rercd = serialPort_writeChar(p_cellcb, *buffer++), rercd);
		wricnt++;
		buffer_full = (bool_t) rercd;
	}
	if (!buffer_full) {
		SVC(cSendSemaphore_signal(), gen_ercd_sys(p_cellcb));
	}
	ercd = E_OK;

  error_exit:
	return(wricnt > 0U ? (ER_UINT) wricnt : ercd);
}
/* #[<ENTRY_FUNC>]# eEnt_func2
 * name:         eEnt_func2
 * global_name:  tSingleCellOptimizeCallee_eEnt_func2
 * oneway:       
 * #[/ENTRY_FUNC>]# */
int32_t
eEnt_func2(CELLIDX idx, int32_t arg)
{
	CELLCB	*p_cellcb;
	if (VALID_IDX(idx)) {
		p_cellcb = GET_CELLCB(idx);
	}
	else {
		/* エラー処理コードをここに記述します */
	}

	/* ここに処理本体を記述します */
	if( is_cCall_joined() ){
		int32_t res;
		res = cCall_func2( arg );
		return res;
	}
	else
		printf( "tSingleCellOptimizeCaller: cCall: not joined\n" );

}
/* #[<ENTRY_FUNC>]# eEnt_func3
 * name:         eEnt_func3
 * global_name:  tSingleCellOptimizeCallee_eEnt_func3
 * oneway:       
 * #[/ENTRY_FUNC>]# */
struct tagST 
eEnt_func3(CELLIDX idx, struct tagST  a)
{
	CELLCB	*p_cellcb;
	if (VALID_IDX(idx)) {
		p_cellcb = GET_CELLCB(idx);
	}
	else {
		/* エラー処理コードをここに記述します */
	}

	/* ここに処理本体を記述します */
	if( is_cCall_joined() ){
		struct tagST res;
		res = cCall_func3( a );
		return res;
	}
	else
		printf( "tSingleCellOptimizeCaller: cCall: not joined\n" );

}
Ejemplo n.º 9
0
/* #[<ENTRY_FUNC>]# eEnt_func26
 * name:         eEnt_func26
 * global_name:  tSimpleServer_eEnt_func26
 * oneway:       false
 * #[</ENTRY_FUNC>]# */
ER
eEnt_func26(CELLIDX idx, STA** sta, int32_t len)
{
	ER		ercd = E_OK;
	CELLCB	*p_cellcb;
	int_t	i;
	if (VALID_IDX(idx)) {
		p_cellcb = GET_CELLCB(idx);
	}
	else {
		return(E_ID);
	}

	/* ここに処理本体を記述します #_TEFB_# */
	syslog( LOG_INFO, " len=%d", len );
	for( i = 0; i < len; i++ )
		syslog( LOG_INFO, "  sta[%d]->a=%d,   sta[%d]->b=%d", i, sta[i]->a, i, sta[i]->b );

	EENT_FUNC26_STA_DEALLOC( sta, len );
	return(ercd);
}
Ejemplo n.º 10
0
/* #[<ENTRY_FUNC>]# eEnt_func5
 * name:         eEnt_func5
 * global_name:  tSimpleServer_eEnt_func5
 * oneway:       false
 * #[</ENTRY_FUNC>]# */
ER
eEnt_func5(CELLIDX idx, const STA** sta, int32_t len)
{
	ER		ercd = E_OK;
	CELLCB	*p_cellcb;
	int_t	i;
	if (VALID_IDX(idx)) {
		p_cellcb = GET_CELLCB(idx);
	}
	else {
		return(E_ID);
	}

	/* ここに処理本体を記述します #_TEFB_# */
	for( i = 0; i < len; i++ ){
		syslog( LOG_INFO, "sta[%d]->a=%d  sta[%d]->b=%d", i, sta[i]->a, i, sta[i]->b );
		syslog( LOG_INFO, "sta[%d]->len=%d", i, sta[i]->len );
		syslog( LOG_INFO, sta[i]->msg );
	}
	return(ercd);
}
Ejemplo n.º 11
0
/* #[<ENTRY_FUNC>]# eEnt_func14
 * name:         eEnt_func14
 * global_name:  tSimpleServer_eEnt_func14
 * oneway:       false
 * #[</ENTRY_FUNC>]# */
ER
eEnt_func14(CELLIDX idx, STB** sta, int32_t len)
{
	ER		ercd = E_OK;
	CELLCB	*p_cellcb;
	int_t	i;
	if (VALID_IDX(idx)) {
		p_cellcb = GET_CELLCB(idx);
	}
	else {
		return(E_ID);
	}

	/* ここに処理本体を記述します #_TEFB_# */
	for( i = 0; i < len; i++ ){
		sta[i]->a = i + 100;
		sta[i]->b = - i + 100;
	}

	return(ercd);
}
Ejemplo n.º 12
0
/* #[<ENTRY_FUNC>]# eEnt_func4
 * name:         eEnt_func4
 * global_name:  tSimpleServer_eEnt_func4
 * oneway:       false
 * #[</ENTRY_FUNC>]# */
ER
eEnt_func4(CELLIDX idx, const char_t** msg, int32_t len)
{
	ER		ercd = E_OK;
	CELLCB	*p_cellcb;
	int32_t i;
	if (VALID_IDX(idx)) {
		p_cellcb = GET_CELLCB(idx);
	}
	else {
		return(E_ID);
	}

	/* ここに処理本体を記述します #_TEFB_# */
	for( i = 0; i < len; i++ ){
		puts( msg[i] );
		/* msg[i] は NULL 終端されているとは限らないので、このコーディングは不適切 */
		/* string(10) のぎりぎりまで詰め込むテストケースを作る場合には問題が発生する */
	}

	return(ercd);
}
Ejemplo n.º 13
0
/* #[<ENTRY_FUNC>]# eC0_send
 * name:         eC0_send
 * global_name:  tTINETClient_eC0_send
 * oneway:       false
 * #[</ENTRY_FUNC>]# */
ER
eC0_send(CELLIDX idx, const int8_t* buf, int16_t size, TMO tmo)
{
	ER		ercd = E_OK;
	CELLCB	*p_cellcb;
	int     sz;

	if (VALID_IDX(idx)) {
		p_cellcb = GET_CELLCB(idx);
	}
	else {
		return(E_ID);
	}

	/* ここに処理本体を記述します */
#ifdef DEBUG
	syslog( LOG_INFO, "tTINETServer: send" );
	{
		int i;
		for( i = 0; i < size; i++ ){
			printf( "%02X ", (unsigned char)buf[i] );
			if( i % 8 == 7 )
				putchar( '\n' );
		}
		putchar( '\n' );
	}
#endif
	while(size>0){
		if((sz=tcp_snd_dat( ATTR_cep_id, (intptr_t *)buf, (size_t)size, tmo )) < 0 ){
			ercd = sz;
			break;
		}
		else{
			size -= sz;
		}
	}

	return(ercd);
}
Ejemplo n.º 14
0
/* #[<ENTRY_FUNC>]# eOpener_open
 * name:         eOpener_open
 * global_name:  tTINETClient_eOpener_open
 * oneway:       false
 * #[</ENTRY_FUNC>]# */
ER
eOpener_open(CELLIDX idx, const T_IPV4EP* clientAddr, TMO tmo)
{
	ER		ercd = E_OK;
	CELLCB	*p_cellcb;
	if (VALID_IDX(idx)) {
		p_cellcb = GET_CELLCB(idx);
	}
	else {
		return(E_ID);
	}

	/* ここに処理本体を記述します #_TEFB_# */
	puts("opening");
	ercd=tcp_con_cep(ATTR_cep_id, NADR, clientAddr, tmo);
	if(ercd<0){
		puts("failed");
		syslog( LOG_INFO, "TINETClient: connect failed");
	}

	return(ercd);
}
Ejemplo n.º 15
0
/* #[<ENTRY_FUNC>]# eEnt_func13
 * name:         eEnt_func13
 * global_name:  tSimpleServer_eEnt_func13
 * oneway:       false
 * #[</ENTRY_FUNC>]# */
ER
eEnt_func13(CELLIDX idx, STB* sta, int32_t len)
{
	ER		ercd = E_OK;
	CELLCB	*p_cellcb;
	int32_t  i;

	if (VALID_IDX(idx)) {
		p_cellcb = GET_CELLCB(idx);
	}
	else {
		return(E_ID);
	}

	/* ここに処理本体を記述します #_TEFB_# */
	for( i = 0; i < len; i++ ){
		sta[i].a = ( i + 1 ) * 2 - 1;
		sta[i].b = ( i + 1 ) * 2;
	}

	return(ercd);
}
Ejemplo n.º 16
0
/* #[<ENTRY_FUNC>]# ePPAllocator_dealloc
 * name:         ePPAllocator_dealloc
 * global_name:  tPPAllocator_ePPAllocator_dealloc
 * oneway:       false
 * #[</ENTRY_FUNC>]# */
ER
ePPAllocator_dealloc(CELLIDX idx, const void* ptr)
{
	ER		ercd = E_OK;
	CELLCB	*p_cellcb;
	if (VALID_IDX(idx)) {
		p_cellcb = GET_CELLCB(idx);
	}
	else {
		return(E_ID);
	}

	/* ここに処理本体を記述します #_TEFB_# */
	if( (uintptr_t)ptr < (uintptr_t)VAR_buf || (uintptr_t)ptr >= (uintptr_t)(VAR_buf+VAR_allocatedSize) ){
		ercd = E_PAR;
	}
	else {
		VAR_allocatedSize = (uintptr_t)ptr - (uintptr_t)VAR_buf;
	}

	return(ercd);
}
Ejemplo n.º 17
0
/* #[<ENTRY_FUNC>]# eEnt_func12
 * name:         eEnt_func12
 * global_name:  tSimpleServer_eEnt_func12
 * oneway:       false
 * #[</ENTRY_FUNC>]# */
ER
eEnt_func12(CELLIDX idx, char_t** msg)
{
	ER		ercd = E_OK;
	int_t   i;
	char    *MSG[8] = { "we", "are", "very", "glad", "you", "join", "TECS RPC", "Too long string will be chopped in 32." };

	CELLCB	*p_cellcb;
	if (VALID_IDX(idx)) {
		p_cellcb = GET_CELLCB(idx);
	}
	else {
		return(E_ID);
	}

	syslog( LOG_INFO, "func12 called" );
	/* ここに処理本体を記述します #_TEFB_# */
	for( i = 0; i < 8; i++ )
		strncpy( msg[i], MSG[i], 32 );

	return(ercd);
}
Ejemplo n.º 18
0
/* #[<ENTRY_FUNC>]# eBody_main
 * name:         eBody_main
 * global_name:  tTestClient_eBody_main
 * oneway:       
 * #[/ENTRY_FUNC>]# */
void
eBody_main(CELLIDX idx)
{
	CELLCB	*p_cellcb;
	if (VALID_IDX(idx)) {
		p_cellcb = GET_CELLCB(idx);
	}
	else {
		/* エラー処理コードをここに記述します */
	}

	/* ここに処理本体を記述します */
	{
		void *p;
#define BUF_SZ    16

		cS_snd_buf_alloc( BUF_SZ, &p );
		strncpy( p, "msg: calling cS_snd", BUF_SZ - 1);
		((char_t *)p)[BUF_SZ-1] = 0;
		cS_snd( p, BUF_SZ );
	}

}
Ejemplo n.º 19
0
/* #[<ENTRY_FUNC>]# ePPAllocator_alloc
 * name:         ePPAllocator_alloc
 * global_name:  tPPAllocator_ePPAllocator_alloc
 * oneway:       false
 * #[</ENTRY_FUNC>]# */
ER
ePPAllocator_alloc(CELLIDX idx, uint32_t size, void** ptr)
{
	ER		ercd = E_OK;
	CELLCB	*p_cellcb;
	if (VALID_IDX(idx)) {
		p_cellcb = GET_CELLCB(idx);
	}
	else {
		return(E_ID);
	}

	/* ここに処理本体を記述します #_TEFB_# */
	if( size + VAR_allocatedSize > ATTR_heapSize ){
		ercd = E_NOMEM;
	}
	else {
		*ptr = (void *)(VAR_buf+VAR_allocatedSize);
		VAR_allocatedSize += size;
	}

	return(ercd);
}
Ejemplo n.º 20
0
/* #[<ENTRY_FUNC>]# eDev_Send
 * name:         eDev_Send
 * global_name:  tDev_eDev_Send
 * oneway:       false
 * #[</ENTRY_FUNC>]# */
ER
eDev_Send(CELLIDX idx, int8_t* buf, int32_t len)
{
	ER		ercd = E_OK;
	CELLCB	*p_cellcb;
	if (VALID_IDX(idx)) {
		p_cellcb = GET_CELLCB(idx);
	}
	else {
		return(E_ID);
	}

	/* ここに処理本体を記述します #_TEFB_# */
	eDev_Send_buf_dealloc( (void *)buf );
	syslog( LOG_INFO, "tDev: eDev_Send: Enter (len=%d)", len );

	syslog( LOG_INFO, "tDev: eDev_Send: calling cCB_Receive()" );
	cCB_Receive( &buf, &len );
	syslog( LOG_INFO, "tDev: eDev_Send: returned from cCB_Receive(len=%d)", len );
	cCB_Receive_buf_dealloc( (void *)buf );

	return(ercd);
}
Ejemplo n.º 21
0
/* #[<ENTRY_FUNC>]# eErrorHandler_errorOccured
 * name:         eErrorHandler_errorOccured
 * global_name:  tServerErrorHandler_eErrorHandler_errorOccured
 * oneway:       false
 * #[</ENTRY_FUNC>]# */
ER
eErrorHandler_errorOccured(CELLIDX idx, int16_t func_id, ER er, int16_t state)
{
	ER		ercd = E_OK;
	CELLCB	*p_cellcb;
	if (VALID_IDX(idx)) {
		p_cellcb = GET_CELLCB(idx);
	}
	else {
		return(E_ID);
	} /* end if VALID_IDX(idx) */

	/* ここに処理本体を記述します #_TEFB_# */

	/* チャンネルを閉じたのち、1秒休憩して、再度開きなおす */
	syslog( LOG_INFO, "ServerHandler closing channel" );
	cOpener_close( );
	sleep(1);
	syslog( LOG_INFO, "ServerHandler reopen channel" );
	cOpener_open( );

	return(ercd);
}
Ejemplo n.º 22
0
/* #[<ENTRY_FUNC>]# eEnt_func32
 * name:         eEnt_func32
 * global_name:  tSimpleServer_eEnt_func32
 * oneway:       false
 * #[</ENTRY_FUNC>]# */
ER
eEnt_func32(CELLIDX idx, STA** sta)
{
	ER		ercd = E_OK;
	CELLCB	*p_cellcb;
	if (VALID_IDX(idx)) {
		p_cellcb = GET_CELLCB(idx);
	}
	else {
		return(E_ID);
	}

	/* ここに処理本体を記述します #_TEFB_# */
	eEnt_func31_a_alloc( sizeof(STA), (void**) sta );
	(*sta)->a = 2;
	(*sta)->b = 141421;
#define	FUNC32_MSG	"You have a big chance."
	(*sta)->len = (*sta)->count = sizeof FUNC32_MSG;
	eEnt_func31_a_alloc( sizeof(FUNC32_MSG), (void**)&(*sta)->msg );
	strcpy( (*sta)->msg, FUNC32_MSG );

	return(ercd);
}
/*
 *  シリアルポートの制御(受け口関数)
 */
ER
eSerialPort_control(CELLIDX idx, uint_t ioctl)
{
	CELLCB	*p_cellcb;

	if (sns_dpn()) {				/* コンテキストのチェック */
		return(E_CTX);
	}
	if (!VALID_IDX(idx)) {
		return(E_ID);				/* ポート番号のチェック */
	}

	p_cellcb = GET_CELLCB(idx);
	if (!VAR_openFlag) {			/* オープン済みかのチェック */
		return(E_OBJ);
	}
	if (VAR_errorFlag) {			/* エラー状態かのチェック */
		return(E_SYS);
	}

	VAR_ioControl = ioctl;
	return(E_OK);
}
Ejemplo n.º 24
0
/* #[<ENTRY_FUNC>]# eEnt_func9
 * name:         eEnt_func9
 * global_name:  tSimpleServer_eEnt_func9
 * oneway:       false
 * #[</ENTRY_FUNC>]# */
ER
eEnt_func9(CELLIDX idx, const STA* arraySt[ArraySizeSTA])
{
	ER		ercd = E_OK;
	CELLCB	*p_cellcb;
	int		i;
	if (VALID_IDX(idx)) {
		p_cellcb = GET_CELLCB(idx);
	}
	else {
		return(E_ID);
	}

	/* ここに処理本体を記述します #_TEFB_# */
	for( i = 0; i < ArraySizeSTA; i++ ){
		syslog( LOG_INFO, "arraySt[%d]->a=%d  arraySt[%d]->b=%d",
				i, arraySt[i]->a, i, arraySt[i]->b );
		syslog( LOG_INFO, "arraySt[%d]->len=%d", i, arraySt[i]->len );
		syslog( LOG_INFO, arraySt[i]->msg );
	}

	return(ercd);
}
Ejemplo n.º 25
0
/* #[<ENTRY_FUNC>]# eAlloc_dealloc
 * name:         eAlloc_dealloc
 * global_name:  tAlloc_eAlloc_dealloc
 * oneway:       false
 * #[</ENTRY_FUNC>]# */
ER
eAlloc_dealloc(CELLIDX idx, const void* ptr)
{
	ER		ercd = E_OK;
	CELLCB	*p_cellcb;
	ALLOC_TAG	*at;
	if (VALID_IDX(idx)) {
		p_cellcb = GET_CELLCB(idx);
	}
	else {
		return(E_ID);
	}

	/* ここに処理本体を記述します */
	at = (ALLOC_TAG *)(ptr-sizeof( ALLOC_TAG ));
	VAR_n_dealloc++;
	VAR_byte_dealloc+=at->byte_allocated;
	VAR_id_map[ at->id ] = 0;
	syslog(LOG_INFO, "free size=%d p=%08X id=%d", at->byte_allocated, ptr, at->id );

	free((void*)at);

	return(ercd);
}
/*
 *  シリアルポート状態の参照(受け口関数)
 */
ER
eSerialPort_refer(CELLIDX idx, T_SERIAL_RPOR* pk_rpor)
{
	CELLCB	*p_cellcb;

	if (sns_dpn()) {				/* コンテキストのチェック */
		return(E_CTX);
	}
	if (!VALID_IDX(idx)) {
		return(E_ID);				/* ポート番号のチェック */
	}

	p_cellcb = GET_CELLCB(idx);
	if (!VAR_openFlag) {			/* オープン済みかのチェック */
		return(E_OBJ);
	}
	if (VAR_errorFlag) {			/* エラー状態かのチェック */
		return(E_SYS);
	}

	pk_rpor->reacnt = VAR_receiveCount;
	pk_rpor->wricnt = VAR_sendCount;
	return(E_OK);
}
Ejemplo n.º 27
0
/* #[<ENTRY_FUNC>]# eAlloc_printStatistics
 * name:         eAlloc_printStatistics
 * global_name:  tAlloc_eAlloc_printStatistics
 * oneway:       false
 * #[</ENTRY_FUNC>]# */
ER
eAlloc_printStatistics(CELLIDX idx)
{
	ER			ercd = E_OK;
	CELLCB		*p_cellcb;
	uint32_t	i;
	if (VALID_IDX(idx)) {
		p_cellcb = GET_CELLCB(idx);
	}
	else {
		return(E_ID);
	}

	/* ここに処理本体を記述します #_TEFB_# */
	syslog( LOG_INFO, "=== tAlloc: print statistics ===" );
	syslog( LOG_INFO, "n_alloc=%d n_dealloc=%d byte_alloc=%d byte_dealloc=%d",
			VAR_n_alloc, VAR_n_dealloc, VAR_byte_alloc, VAR_byte_dealloc );
	for( i = 0; i < ATTR_max_n_alloc; i++ ){
		if( VAR_id_map[ i ] != 0 )
			syslog( LOG_INFO, "unfreed id=%d", i );
	}

	return(ercd);
}
/*
 *  シリアルポートのオープン(受け口関数)
 */
ER
eSerialPort_open(CELLIDX idx)
{
	CELLCB	*p_cellcb;
	ER		ercd;

	if (sns_dpn()) {				/* コンテキストのチェック */
		return(E_CTX);
	}
	if (!VALID_IDX(idx)) {
		return(E_ID);				/* ポート番号のチェック */
	}
	p_cellcb = GET_CELLCB(idx);

	SVC(dis_dsp(), gen_ercd_sys(p_cellcb));
	if (VAR_openFlag) {				/* オープン済みかのチェック */
		ercd = E_OBJ;
	}
	else {
		/*
		 *  変数の初期化
		 */
		VAR_ioControl = (IOCTL_ECHO | IOCTL_CRLF | IOCTL_FCSND | IOCTL_FCRCV);

		VAR_receiveReadPointer = 0U;
		VAR_receiveWritePointer = 0U;
		VAR_receiveCount = 0U;
		VAR_receiveFlowControl = '\0';
		VAR_receiveStopped = false;

		VAR_sendReadPointer = 0U;
		VAR_sendWritePointer = 0U;
		VAR_sendCount = 0U;
		VAR_sendStopped = false;

		/*
		 *  これ以降,割込みを禁止する.
		 */
		if (loc_cpu() < 0) {
			ercd = E_SYS;
			goto error_exit_enadsp;
		}

		/*
		 *  ハードウェア依存のオープン処理
		 */
		cSIOPort_open();

		/*
		 *  受信通知コールバックを許可する.
		 */
		cSIOPort_enableCBR(SIOReceiveReady);
		VAR_openFlag = true;
		VAR_errorFlag = false;

		if (unl_cpu() < 0) {
			VAR_errorFlag = true;
			ercd = E_SYS;
			goto error_exit_enadsp;
		}
		ercd = E_OK;
	}

  error_exit_enadsp:
	SVC(ena_dsp(), gen_ercd_sys(p_cellcb));

  error_exit:
	return(ercd);
}
/*
 *  シリアルポートからの受信通知コールバック(受け口関数)
 */
void
eiSIOCBR_readyReceive(CELLIDX idx)
{
	CELLCB	*p_cellcb;
	char	c;

	assert(VALID_IDX(idx));
	p_cellcb = GET_CELLCB(idx);
	c = (char) cSIOPort_getChar();
	if ((VAR_ioControl & IOCTL_FCSND) != 0U && c == FC_STOP) {
		/*
		 *  送信を一時停止する.送信中の文字はそのまま送信する.
		 */
		VAR_sendStopped = true;
	}
	else if (VAR_sendStopped && (c == FC_START
				|| (VAR_ioControl & IOCTL_FCANY) != 0U)) {
		/*
		 *  送信を再開する.
		 */
		VAR_sendStopped = false;
		if (VAR_sendCount > 0U) {
			c = VAR_sendBuffer[VAR_sendReadPointer];
			if (serialPort_sendChar(p_cellcb, c)) {
				INC_PTR(VAR_sendReadPointer, ATTR_sendBufferSize);
				if (VAR_sendCount == ATTR_sendBufferSize) {
					if (ciSendSemaphore_signal() < 0) {
						VAR_errorFlag = true;
					}
				}
				VAR_sendCount--;
			}
		}
	}
	else if ((VAR_ioControl & IOCTL_FCSND) != 0U && c == FC_START) {
		/*
		 *  送信に対してフロー制御している場合,START は捨てる.
		 */
	}
	else if (VAR_receiveCount == ATTR_receiveBufferSize) {
		/*
		 *  バッファフルの場合,受信した文字を捨てる.
		 */
	}
	else {
		/*
		 *  受信した文字を受信バッファに入れる.
		 */
		VAR_receiveBuffer[VAR_receiveWritePointer] = c;
		INC_PTR(VAR_receiveWritePointer, ATTR_receiveBufferSize);
		if (VAR_receiveCount == 0U) {
			if (ciReceiveSemaphore_signal() < 0) {
				VAR_errorFlag = true;
			}
		}
		VAR_receiveCount++;

		/*
		 *  STOPを送信する.
		 */
		if ((VAR_ioControl & IOCTL_FCRCV) != 0U && !VAR_receiveStopped
				&& VAR_receiveCount >= BUFCNT_STOP(ATTR_receiveBufferSize)) {
			if (!serialPort_sendChar(p_cellcb, FC_STOP)) {
				VAR_receiveFlowControl = FC_STOP;
			}
			VAR_receiveStopped = true;
		}
	}
}