First step to implementing a protocol must of course start with a thorough investigation of the protocol specification. During the first few weeks I tried to figure out exactly what was the purpose of the Link Manager as well as the Host Controller.
As both the Host Controller and Link Manager uses the Baseband directly and the Host Controller furthermore is in charge of initiating Link Manager functionality I have chosen to tie these two together in one symbol in the implementation. As far as I can see that is actually what is intended in the specification as there is no indication of how the Host Controller should communicate with the Link Manager and since the Host Controller Interface in the protocol stack is just shown as a line and not an individual protocol layer.
In the final version of the symbol I am using all the ports supplied by the original Baseband symbol and have furthermore added three ports AMBDIn, StateOut and Inquiry_In which all were necessary for vital communication between the Baseband and the Link Manager. These three ports are all used for sending data that is private to the Link Manager and the Control part of the Baseband and not something which is specified for either the protocols. This together with the fact that the Link Manager's main task is to control the state of the Baseband leads me to consider that these two might actually be supposed to be tied closer together (IE. let the Link Manager Symbol be part of the Baseband). This makes good sense to me as the Baseband actually does not work without some form of management (in the old implementation of the Baseband some of the Link Manager's tasks were performed to set up the connections when initialising). Either this or an interface between Link Manager and Baseband should be specified (in the Bluetooth Specification the Link Manager is just assumed to have full control of the workings of the Baseband).
HCIPacket_in
Direction: Input
Arguments: HCIPacket
Operation: Used to receive a packet for processing.
HCIPacket_out
Direction: Output
Arguments: HCIPacket
Operation: Used to send events or data from Host Controller to Host.
OneSlotPacketIn
Direction: Input
Arguments: TOneSlotBasebandPacket
Operation: Used to receive a raw single slot packet to be processed.
FiveSlotPacketIn
Direction: Input
Arguments: TFiveSlotBasebandPacket
Operation: As above but receives five slot packets.
BasebandReady_in
Direction: Input
Arguments: Dummy
Operation: Used to signify that the lower layer is ready for operation.
OneSlotPacketOut
Direction: Output
Arguments: TOneSlotBasebandPacket
Operation: Used to send a raw single slot packet to the other side.
FiveSlotPacketOut
Direction: Output
Arguments: TFiveSlotBasebandPacket
Operation: As above but sends five slot packets.
LMPReady_out
Direction: Output
Arguments: Dummy
Operation: Used to tell the Baseband that the Link Manager is ready for operation.
ClockIn
Direction: Input
Arguments: CLKN
Operation: Used to receive the clock signal emitted by the baseband protocol.
AMBDIn
Direction: Input
Arguments: TAMBD_ADDR
Operation: Used by the Baseband to inform the
Link Manager of the Active Member address decided upon by the
Baseband.
StateOut
Direction: Output
Arguments: TStateIn
Operation: This output port is used to set the state of the
Baseband.
Inquiry_In
Direction: Input
Arguments: HCIPacket
Operation: This input port is used to receive results of
inquiries done by the Baseband.