#ifndef tMessageBufferCEP__INLINE_H
#define tMessageBufferCEP__INLINE_H
/* #[]#
* #[<...>]# から #[]# で囲まれたコメントは編集しないでください
* tecsmerge によるマージに使用されます
*
* 呼び口関数 #_TCPF_#
* call port: cMessageBuffer0 signature: sMessageBuffer context:task
* ER cMessageBuffer0_send( const uint8_t* message, uint32_t size );
* ER cMessageBuffer0_sendPolling( const uint8_t* message, uint32_t size );
* ER cMessageBuffer0_sendTimeout( const uint8_t* message, uint32_t size, TMO timeout );
* ER_UINT cMessageBuffer0_receive( uint8_t* message );
* ER_UINT cMessageBuffer0_receivePolling( uint8_t* message );
* ER_UINT cMessageBuffer0_receiveTimeout( uint8_t* message, TMO timeout );
* ER cMessageBuffer0_initialize( );
* ER cMessageBuffer0_refer( T_RMBF* pk_messageBufferStatus );
* call port: cMessageBuffer1 signature: sMessageBuffer context:task
* ER cMessageBuffer1_send( const uint8_t* message, uint32_t size );
* ER cMessageBuffer1_sendPolling( const uint8_t* message, uint32_t size );
* ER cMessageBuffer1_sendTimeout( const uint8_t* message, uint32_t size, TMO timeout );
* ER_UINT cMessageBuffer1_receive( uint8_t* message );
* ER_UINT cMessageBuffer1_receivePolling( uint8_t* message );
* ER_UINT cMessageBuffer1_receiveTimeout( uint8_t* message, TMO timeout );
* ER cMessageBuffer1_initialize( );
* ER cMessageBuffer1_refer( T_RMBF* pk_messageBufferStatus );
*
* #[]# */
/* 受け口関数 #_TEPF_# */
/* #[]# eChannel
* entry port: eChannel
* signature: sChannel
2 * context: task
* #[]# */
/* #[]# eChannel_send
* name: eChannel_send
* global_name: tMessageBufferCEP_eChannel_send
* oneway: false
* #[]# */
Inline ER
eChannel_send(CELLIDX idx, const int8_t* buf, int16_t size, TMO tmo)
{
ER ercd = E_OK;
int16_t write_count;
CELLCB *p_cellcb;
if (VALID_IDX(idx)) {
p_cellcb = GET_CELLCB(idx);
}
else {
return(E_ID);
} /* end if VALID_IDX(idx) */
(void)p_cellcb; // to avoid unused warning
/* ここに処理本体を記述します #_TEFB_# */
if( size < 0 )
return E_PAR;
else if( size == 0 )
return E_OK;
write_count = 0;
while( write_count < size ){
VAR_write_buf[ VAR_write_count++ ] = buf[ write_count++ ];
if( VAR_write_count >= ATTR_buf_size ){
ercd = eChannel_flush( idx, tmo);
if( ercd != E_OK ){
break;
}
}
}
// syslog( LOG_INFO, "eChannel_send ercd=%d", ercd );
return(ercd);
}
/* #[]# eChannel_flush
* name: eChannel_flush
* global_name: tMessageBufferCEP_eChannel_flush
* oneway: false
* #[]# */
Inline ER
eChannel_flush(CELLIDX idx, TMO tmo)
{
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) */
(void)p_cellcb; // to avoid unused warning
/* ここに処理本体を記述します #_TEFB_# */
/* flush しなくても、いつも送られる */
if( VAR_write_count > 0 ){
ercd = cMessageBuffer0_sendTimeout( (const uint8_t *)VAR_write_buf, VAR_write_count, tmo );
}
// syslog( LOG_INFO, "eChannel_flush ercd=%d count=%d", ercd, VAR_write_count );
VAR_write_count = 0;
return(ercd);
}
/* #[]# eChannel_receive
* name: eChannel_receive
* global_name: tMessageBufferCEP_eChannel_receive
* oneway: false
* #[]# */
Inline ER_UINT
eChannel_receive(CELLIDX idx, int8_t* buf, int16_t size, TMO tmo)
{
ER ercd = E_OK;
CELLCB *p_cellcb;
int16_t count = 0;
if (VALID_IDX(idx)) {
p_cellcb = GET_CELLCB(idx);
}
else {
return(E_ID);
} /* end if VALID_IDX(idx) */
(void)p_cellcb; // to avoid unused warning
/* ここに処理本体を記述します #_TEFB_# */
if( size == 0 )
return 0;
while( count < size ){
if( VAR_n_read_buf_filled == 0 ){
ercd = cMessageBuffer1_receiveTimeout( (uint8_t *)VAR_read_buf, tmo );
if( ercd < 0 )
break;
VAR_n_read_buf_filled = ercd;
}
while( count < size && VAR_read_count < VAR_n_read_buf_filled ){
buf[ count ] = VAR_read_buf[ VAR_read_count ];
count++;
VAR_read_count++;
}
if( VAR_read_count >= VAR_n_read_buf_filled ){
VAR_n_read_buf_filled = 0;
VAR_read_count = 0;
}
ercd = count;
}
// syslog( LOG_INFO, "eChannel_receive ercd=%d", ercd );
return(ercd);
}
/* #[]# eChannel_end_receive
* name: eChannel_end_receive
* global_name: tMessageBufferCEP_eChannel_end_receive
* oneway: false
* #[]# */
Inline ER
eChannel_end_receive(CELLIDX idx)
{
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) */
(void)p_cellcb; // to avoid unused warning
/* ここに処理本体を記述します #_TEFB_# */
return(ercd);
}
/* #[]# eChannel_reset
* name: eChannel_reset
* global_name: tMessageBufferCEP_eChannel_reset
* oneway: false
* #[]# */
Inline ER
eChannel_reset(CELLIDX idx)
{
ER ercd0 = E_OK, ercd1 = E_OK;
CELLCB *p_cellcb;
if (VALID_IDX(idx)) {
p_cellcb = GET_CELLCB(idx);
}
else {
return(E_ID);
} /* end if VALID_IDX(idx) */
(void)p_cellcb; // to avoid unused warning
/* ここに処理本体を記述します #_TEFB_# */
ercd0 = cMessageBuffer0_initialize( );
ercd1 = cMessageBuffer1_initialize( );
return(ercd1 != E_OK ? ercd1 : ercd0);
}
/* #[]#
* これより下に非受け口関数を書きます
* #[]#*/
#endif /* tMessageBufferCEP_INLINEH */