BLE solutions provided by Cypress are listed on the Bluetooth SIG website as certified solutions. The qualification is modular, allowing greater flexibility to customers. The following is the list of Qualified Design IDs (QD ID) and Declaration IDs.
PSoC 6 MCU with Bluetooth Low Energy (BLE) Connectivity delivers ultra-low-power, best-in-class flexible and built-in security for the Internet of Things (IoT). It's built on an ultra-low-power 40-nm process technology and uses a dual-core Arm
Cortex -M architecture, which includes an Cortex-M4 and Cortex-M0+. The BLE radio is built using an ultra-low-power 55-nm process. PSoC 6 MCU with BLE Connectivity combines a BLE subsystem with software-defined analog and digital peripherals, CapSense , programmable interconnect, a high-performance dual-core architecture, and critical security features in a single chip.
This section describes the MISRA-C:2004 compliance and deviations for the PSoC 6 BLE Middleware.
Rule Class (Required/ Advisory)
Description of Deviation(s)
No reliance shall be placed on undefined or unspecified behaviour.
This specific behavior is explicitly covered in rule 5.1.
Identifiers (internal and external) shall not rely on the significance of more than 31 characters.
This rule applies to ISO:C90 standard. PDL conforms to ISO:C99 that does not require this limitation.
No identifier in one name space should have the same spelling as an identifier in another name space, with the exception of structure member and union member names.
The internal structure has field with the same name as function of standard library. This is safe as any assignment to the function from standard library will be discovered at design time.
In an enumerator list, the '=' construct shall not be used to explicitly initialise members other than the first, unless all items are explicitly initialised.
There are enumerator lists which depend on configurations (e.g. cy_en_ble_srvi_t) and require to use the '=' construct for calculating the instance count for the multi-instances services, such as HIDS, BAS or CUSTOM
The value of an expression of integer type shall not be implicitly converted to a different underlying type under some circumstances.
An operand of essentially enum type is being converted to unsigned type as a result of an arithmetic or conditional operation. The conversion does not have any unintended effect.
A composite integer expression is being cast to a wider type.
Use of a Cypress defined macro to access memory-mapped objects. Calculating the clock parameters.
A cast should not be performed between a pointer to object type and a different pointer to object type.
A cast involving pointers is conducted with caution that the pointers are correctly aligned for the type of object being pointed to.
A cast shall not be performed that removes any const or volatile qualification from the type addressed by a pointer.
The const or volatile qualification is lost during pointer cast before passing to the stack functions.
Boolean operations whose results are invariant shall not be permitted.
A Boolean operator can yield a result that can be proven to be always "true" or always "false" in some specific configurations because of generalized implementation approach.
The object addressed by the pointer parameter is not modified and so the pointer could be of type 'pointer to const'.
The 'base' and 'content' parameters in Cy_BLE_DeepSleepCallback function are not used by BLE but callback type is universal for all drivers.
Unions shall not be used.
The use of deviations is acceptable for packing and unpacking of data, for example when sending and receiving messages, and implementing variant records provided that the variants are differentiated by a common field.
Preprocessing directives shall be syntactically meaningful even when excluded by the preprocessor.
The reason for this deviation is that not standard directive "warning" is used. This directive is works on all compilers which PDL supports (e.g. GCC, IAR, MDK).