blob: 94f36d3f9807f91947b9582a7e4429c1c33add02 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*/
// package org.apache.plc4x.rust.s7.readwrite;
use std::io::{Error, ErrorKind, Read, Write};
use plc4rust::{Message, NoOption};
use plc4rust::read_buffer::ReadBuffer;
use plc4rust::write_buffer::WriteBuffer;
#[derive(Copy, Clone, PartialEq, Debug)]
#[allow(non_camel_case_types)]
pub enum SzlSublist {
MODULE_IDENTIFICATION,
CPU_FEATURES,
USER_MEMORY_AREA,
SYSTEM_AREAS,
BLOCK_TYPES,
STATUS_MODULE_LEDS,
COMPONENT_IDENTIFICATION,
INTERRUPT_STATUS,
ASSIGNMENT_BETWEEN_PROCESS_IMAGE_PARTITIONS_AND_OBS,
COMMUNICATION_STATUS_DATA,
STATUS_SINGLE_MODULE_LED,
DP_MASTER_SYSTEM_INFORMATION,
MODULE_STATUS_INFORMATION,
RACK_OR_STATION_STATUS_INFORMATION,
RACK_OR_STATION_STATUS_INFORMATION_2,
ADDITIONAL_DP_MASTER_SYSTEM_OR_PROFINET_IO_SYSTEM_INFORMATION,
MODULE_STATUS_INFORMATION_PROFINET_IO_AND_PROFIBUS_DP,
DIAGNOSTIC_BUFFER,
MODULE_DIAGNOSTIC_DATA
}
impl TryFrom<u8> for SzlSublist {
type Error = ();
fn try_from(value: u8) -> Result<Self, Self::Error> {
match value {
0x11 => Ok(SzlSublist::MODULE_IDENTIFICATION),
0x12 => Ok(SzlSublist::CPU_FEATURES),
0x13 => Ok(SzlSublist::USER_MEMORY_AREA),
0x14 => Ok(SzlSublist::SYSTEM_AREAS),
0x15 => Ok(SzlSublist::BLOCK_TYPES),
0x19 => Ok(SzlSublist::STATUS_MODULE_LEDS),
0x1C => Ok(SzlSublist::COMPONENT_IDENTIFICATION),
0x22 => Ok(SzlSublist::INTERRUPT_STATUS),
0x25 => Ok(SzlSublist::ASSIGNMENT_BETWEEN_PROCESS_IMAGE_PARTITIONS_AND_OBS),
0x32 => Ok(SzlSublist::COMMUNICATION_STATUS_DATA),
0x74 => Ok(SzlSublist::STATUS_SINGLE_MODULE_LED),
0x90 => Ok(SzlSublist::DP_MASTER_SYSTEM_INFORMATION),
0x91 => Ok(SzlSublist::MODULE_STATUS_INFORMATION),
0x92 => Ok(SzlSublist::RACK_OR_STATION_STATUS_INFORMATION),
0x94 => Ok(SzlSublist::RACK_OR_STATION_STATUS_INFORMATION_2),
0x95 => Ok(SzlSublist::ADDITIONAL_DP_MASTER_SYSTEM_OR_PROFINET_IO_SYSTEM_INFORMATION),
0x96 => Ok(SzlSublist::MODULE_STATUS_INFORMATION_PROFINET_IO_AND_PROFIBUS_DP),
0xA0 => Ok(SzlSublist::DIAGNOSTIC_BUFFER),
0xB1 => Ok(SzlSublist::MODULE_DIAGNOSTIC_DATA),
_ => {
panic!("Unable to deserialize enum!")
}
}
}
}
impl Into<u8> for SzlSublist {
fn into(self) -> u8 {
match self {
MODULE_IDENTIFICATION => 0x11,
CPU_FEATURES => 0x12,
USER_MEMORY_AREA => 0x13,
SYSTEM_AREAS => 0x14,
BLOCK_TYPES => 0x15,
STATUS_MODULE_LEDS => 0x19,
COMPONENT_IDENTIFICATION => 0x1C,
INTERRUPT_STATUS => 0x22,
ASSIGNMENT_BETWEEN_PROCESS_IMAGE_PARTITIONS_AND_OBS => 0x25,
COMMUNICATION_STATUS_DATA => 0x32,
STATUS_SINGLE_MODULE_LED => 0x74,
DP_MASTER_SYSTEM_INFORMATION => 0x90,
MODULE_STATUS_INFORMATION => 0x91,
RACK_OR_STATION_STATUS_INFORMATION => 0x92,
RACK_OR_STATION_STATUS_INFORMATION_2 => 0x94,
ADDITIONAL_DP_MASTER_SYSTEM_OR_PROFINET_IO_SYSTEM_INFORMATION => 0x95,
MODULE_STATUS_INFORMATION_PROFINET_IO_AND_PROFIBUS_DP => 0x96,
DIAGNOSTIC_BUFFER => 0xA0,
MODULE_DIAGNOSTIC_DATA => 0xB1
}
}
}
impl Message for SzlSublist {
type M = SzlSublist;
type P = NoOption;
fn get_length_in_bits(&self) -> u32 {
todo!()
}
fn serialize<T: Write>(&self, writer: &mut WriteBuffer<T>) -> Result<usize, Error> {
writer.write_u8((*self).into())
}
fn parse<T: Read>(reader: &mut ReadBuffer<T>, parameter: Option<Self::P>) -> Result<Self::M, Error> {
assert!(parameter.is_none());
let result = reader.read_u8()?;
match SzlSublist::try_from(result) {
Ok(result) => {
Ok(result)
}
Err(_) => {
panic!("Cannot parse {}", result);
}
}
}
}