module toaster {

    namespace "http://netconfcentral.org/ns/toaster";

    prefix "toast";

    organization
        "Netconf Central";

    contact
        "Andy Bierman <andy@netconfcentral.org>";

    description
        "YANG version of the TOASTER-MIB.

     Copyright (c) 2009 Andy Bierman and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject
     to the license terms contained in, the BSD 3-Clause License
     http://opensource.org/licenses/BSD-3-Clause";

    revision 2009-11-20 {
        description "Toaster module in progress.";
    }

    identity toast-type {
        description
          "Base for all bread types supported by the toaster.
           New bread types not listed here nay be added in the 
           future.";
    }

    identity white-bread {
        description
          "White bread.";
        base toast:toast-type;
    }

    identity wheat-bread {
        description
          "Wheat bread.";
        base toast-type;
    }

    identity wonder-bread {
        description
          "Wonder bread.";
        base toast-type;
    }

    identity frozen-waffle {
        description
          "Frozen waffle.";
        base toast-type;
    }

    identity frozen-bagel {
        description
          "Frozen bagel.";
        base toast-type;
    }

    identity hash-brown {
        description
          "Hash browned potatos.";
        base toast-type;
    }

    typedef DisplayString {
        description
          "YANG version of the SMIv2 DisplayString TEXTUAL-CONVENTION.";
        reference "RFC 2579, section 2.";
        type string {
            length "0 .. 255";
        }
    }

    container toaster {
        presence
          "Indicates the toaster service is available";

        description
          "Top-level container for all toaster database objects.";

        leaf toasterManufacturer {
            type DisplayString;
            config false;
            mandatory true;
            description 
              "The name of the toaster's manufacturer. For instance, 
                Microsoft Toaster.";
        }
 
        leaf toasterModelNumber {
            type DisplayString;
            config false;
            mandatory true;
            description
              "The name of the toaster's model. For instance,
               Radiant Automatic.";
        }

        leaf toasterStatus {
            type enumeration {
                enum up {
                  value 1;
                  description
                    "The toaster knob position is up.
                      No toast is being made now.";
                }
                enum down {
                  value 2;
                  description
                    "The toaster knob position is down.
                      Toast is being made now.";

                }
            }
            config false;
            mandatory true;
            description
              "This variable indicates the current state of 
               the toaster.";
        }
    }

    rpc make-toast {
        description
          "Make some toast.
           The toastDone notification will be sent when 
           the toast is finished.
           An 'in-use' error will be returned if toast
           is already being made.
           A 'resource-denied' error will be returned 
           if the toaster service is disabled.";
        input {
            leaf toasterDoneness {
                type uint32 {
                    range "1 .. 10";
                }
                default 5;
                description
                  "This variable controls how well-done is the 
                   ensuing toast. It should be on a scale of 1 to 10.
                   Toast made at 10 generally is considered unfit 
                   for human consumption; toast made at 1 is warmed 
                   lightly.";
            }
            leaf toasterToastType {
                type identityref {
                    base toast:toast-type;
                }
                default toast:wheat-bread;
                description
                  "This variable informs the toaster of the type of 
                   material that is being toasted. The toaster 
                   uses this information, combined with 
                   toasterDoneness, to compute for how 
                   long the material must be toasted to achieve 
                   the required doneness.";
            }
        }
    }

    rpc cancel-toast {
        description
          "Stop making toast, if any is being made.
           A 'resource-denied' error will be returned 
           if the toaster service is disabled.";
    }

    notification toastDone {
        description
          "Indicates that the toast in progress has completed.";

        leaf toastStatus {
           description
             "Indicates the final toast status";
           type enumeration {
               enum done {
                  description
                    "The toast is done.";
               }
               enum cancelled {
                  description
                    "The toast was cancelled.";
               }
               enum error {
                  description
                    "The toaster service was disabled or
                     the toaster is broken.";
               }
            }
        }
    }
               
                       
/*************************************************************

   Original TOASTER-MIB

TOASTER-MIB DEFINITIONS ::= BEGIN

IMPORTS
        enterprises
                FROM RFC1155-SMI
        OBJECT-TYPE
                FROM RFC-1212
        DisplayString
                FROM RFC-1213;

epilogue        OBJECT IDENTIFIER ::= {enterprises 12}
toaster         OBJECT IDENTIFIER ::= {epilogue 2}


toasterManufacturer OBJECT-TYPE
  SYNTAX  DisplayString
  ACCESS  read-only
  STATUS  mandatory
  DESCRIPTION
          "The name of the toaster's manufacturer. For  instance, 
          Microsoft Toaster."
  ::= {toaster 1}

toasterModelNumber OBJECT-TYPE
  SYNTAX  DisplayString
  ACCESS  read-only
  STATUS  mandatory
  DESCRIPTION
          "The name of the toaster's model. For instance,
          Radiant Automatic."
  ::= {toaster 2}

toasterControl OBJECT-TYPE
  SYNTAX  INTEGER  {up (1), down (2)}
  ACCESS  read-write
  STATUS  mandatory
  DESCRIPTION
          "This variable controls the current state of the toaster.
           To begin toasting, set it to down (2). To abort toasting 
          (perhaps in the event of an emergency), set it to up (2)."
  ::= {toaster 3}

toasterDoneness OBJECT-TYPE
  SYNTAX  INTEGER (1..10)
  ACCESS  read-write
  STATUS  mandatory
  DESCRIPTION
          "This variable controls how well-done is the 
           ensuing toast. It should be on a scale of 1 to 10.
           Toast made at 10 generally is considered unfit 
           for human consumption; toast made at 1 is warmed 
           lightly."
  ::= {toaster 4}

toasterToastType OBJECT-TYPE
  SYNTAX  INTEGER {
                    white-bread (1),
                    wheat-bread (2),
                    wonder-bread (3),
                    frozen-waffle (4),
                    frozen-bagel (5),
                    hash-brown (6),
                    other (7)
                  }
  ACCESS  read-write
  STATUS  mandatory
  DESCRIPTION
          "This variable informs the toaster of the type of 
           material that is being toasted. The toaster 
           uses this information, combined with 
           toasterToastDoneness, to compute for how 
           long the material must be toasted to achieve 
           the required doneness."
  ::= {toaster 5}

END

*************************************************************/
        

}
