Example #1
0
/*
 *  シリアルポートからの1文字受信
 */
static bool_t
serial_rea_chr(SPCB *p_spcb, char *p_c)
{
	bool_t	buffer_empty;
	ER		ercd;

	SVC(loc_cpu(), gen_ercd_sys(p_spcb));

	/*
	 *  受信バッファから文字を取り出す.
	 */
	*p_c = p_spcb->p_spinib->rcv_buffer[p_spcb->rcv_read_ptr];
	INC_PTR(p_spcb->rcv_read_ptr, p_spcb->p_spinib->rcv_bufsz);
	p_spcb->rcv_count--;
	buffer_empty = (p_spcb->rcv_count == 0U);

	/*
	 *  STARTを送信する.
	 */
	if (p_spcb->rcv_stopped && p_spcb->rcv_count
								<= BUFCNT_START(p_spcb->p_spinib->rcv_bufsz)) {
		if (!serial_snd_chr(p_spcb, FC_START)) {
			p_spcb->rcv_fc_chr = FC_START;
		}
		p_spcb->rcv_stopped = false;
	}

	SVC(unl_cpu(), gen_ercd_sys(p_spcb));
	ercd = (ER_BOOL) buffer_empty;

  error_exit:
	return(ercd);
}
/*
 *  シリアルポートからの1文字受信
 */
static bool_t
serialPort_readChar(CELLCB *p_cellcb, char *p_c)
{
	bool_t	buffer_empty;
	ER		ercd;

	SVC(loc_cpu(), gen_ercd_sys(p_cellcb));

	/*
	 *  受信バッファから文字を取り出す.
	 */
	*p_c = VAR_receiveBuffer[VAR_receiveReadPointer];
	INC_PTR(VAR_receiveReadPointer, ATTR_receiveBufferSize);
	VAR_receiveCount--;
	buffer_empty = (VAR_receiveCount == 0U);

	/*
	 *  STARTを送信する.
	 */
	if (VAR_receiveStopped && VAR_receiveCount
								<= BUFCNT_START(ATTR_receiveBufferSize)) {
		if (!serialPort_sendChar(p_cellcb, FC_START)) {
			VAR_receiveFlowControl = FC_START;
		}
		VAR_receiveStopped = false;
	}

	SVC(unl_cpu(), gen_ercd_sys(p_cellcb));
	ercd = (ER_BOOL) buffer_empty;

  error_exit:
	return(ercd);
}