コード例 #1
0
ファイル: Slip.cs プロジェクト: rpbrongers/ZigbeeNet
        public slip_error_t slip_read_byte(byte val)
        {
            slip_error_t error = slip_error_t.SLIP_NO_ERROR;

            switch (this.state)
            {
            case slip_state_t.SLIP_STATE_NORMAL:
                switch (val)
                {
                case SLIP_SPECIAL_BYTE_END:
                    if (this.size > 0)
                    {
                        this.descriptor.recv_message(
                            this.descriptor.buf,
                            this.size
                            );
                    }
                    reset_rx();
                    break;

                case SLIP_SPECIAL_BYTE_ESC:
                    this.state = slip_state_t.SLIP_STATE_ESCAPED;
                    break;

                default:
                    error = put_byte_to_buffer(val);
                    break;
                }
                break;

            case slip_state_t.SLIP_STATE_ESCAPED:
                switch (val)
                {
                case SLIP_ESCAPED_BYTE_END:
                    val = SLIP_SPECIAL_BYTE_END;
                    break;

                case SLIP_ESCAPED_BYTE_ESC:
                    val = SLIP_SPECIAL_BYTE_ESC;
                    break;

                default:
                    error = slip_error_t.SLIP_ERROR_UNKNOWN_ESCAPED_BYTE;
                    reset_rx();
                    break;
                }

                if (error != slip_error_t.SLIP_NO_ERROR)
                {
                    break;
                }

                error = put_byte_to_buffer(val);
                break;
            }

            return(error);
        }
コード例 #2
0
ファイル: Slip.cs プロジェクト: rpbrongers/ZigbeeNet
        slip_error_t put_byte_to_buffer(byte val)
        {
            slip_error_t error = slip_error_t.SLIP_NO_ERROR;

            if (this.size >= this.descriptor.buf_size)
            {
                error = slip_error_t.SLIP_ERROR_BUFFER_OVERFLOW;
                reset_rx();
            }
            else
            {
                this.descriptor.buf[this.size++] = val;
                this.state = slip_state_t.SLIP_STATE_NORMAL;
            }

            return(error);
        }