diff --git a/src/app/EventLoggingTypes.h b/src/app/EventLoggingTypes.h index 3a2de1a6f4c974..351774256d2a45 100644 --- a/src/app/EventLoggingTypes.h +++ b/src/app/EventLoggingTypes.h @@ -95,7 +95,7 @@ static_assert(sizeof(std::underlying_type_t) <= sizeof(unsigned), */ struct Timestamp { - enum class Type + enum class Type : uint8_t { kSystem = 0, kEpoch diff --git a/src/app/util/af-types.h b/src/app/util/af-types.h index ced52bb9241a06..9c4a7ca6a5f069 100644 --- a/src/app/util/af-types.h +++ b/src/app/util/af-types.h @@ -35,6 +35,7 @@ #include #include +#include #include #include @@ -123,7 +124,7 @@ typedef struct */ typedef struct { - uint16_t deviceId; + chip::DeviceTypeId deviceId; uint8_t deviceVersion; } EmberAfDeviceType; diff --git a/src/include/platform/BuildTime.h b/src/include/platform/BuildTime.h index 8015a534778a19..979f8c6bbd5e84 100644 --- a/src/include/platform/BuildTime.h +++ b/src/include/platform/BuildTime.h @@ -28,9 +28,9 @@ // Example of __TIME__ string: "21:06:19" #define COMPUTE_BUILD_YEAR(_date) \ - (((_date)[7] - '0') * 1000 + ((_date)[8] - '0') * 100 + ((_date)[9] - '0') * 10 + ((_date)[10] - '0')) + static_cast(((_date)[7] - '0') * 1000 + ((_date)[8] - '0') * 100 + ((_date)[9] - '0') * 10 + ((_date)[10] - '0')) -#define COMPUTE_BUILD_DAY(_date) ((((_date)[4] >= '0') ? ((_date)[4] - '0') * 10 : 0) + ((_date)[5] - '0')) +#define COMPUTE_BUILD_DAY(_date) static_cast((((_date)[4] >= '0') ? ((_date)[4] - '0') * 10 : 0) + ((_date)[5] - '0')) #define BUILD_MONTH_IS_JAN(_date) ((_date)[0] == 'J' && (_date)[1] == 'a') #define BUILD_MONTH_IS_FEB(_date) ((_date)[0] == 'F') @@ -63,9 +63,9 @@ ? 11 \ : (BUILD_MONTH_IS_DEC(_date)) ? 12 : /* error default */ 99) -#define COMPUTE_BUILD_HOUR(_time) (((_time)[0] - '0') * 10 + (_time)[1] - '0') -#define COMPUTE_BUILD_MIN(_time) (((_time)[3] - '0') * 10 + (_time)[4] - '0') -#define COMPUTE_BUILD_SEC(_time) (((_time)[6] - '0') * 10 + (_time)[7] - '0') +#define COMPUTE_BUILD_HOUR(_time) static_cast(((_time)[0] - '0') * 10 + (_time)[1] - '0') +#define COMPUTE_BUILD_MIN(_time) static_cast(((_time)[3] - '0') * 10 + (_time)[4] - '0') +#define COMPUTE_BUILD_SEC(_time) static_cast(((_time)[6] - '0') * 10 + (_time)[7] - '0') #define BUILD_DATE_IS_BAD(_date) ((_date) == nullptr || strlen(_date) < strlen("Jan 01 2000") || (_date)[0] == '?') #define BUILD_TIME_IS_BAD(_time) ((_time) == nullptr || strlen(_time) < strlen("00:00:00") || (_time)[0] == '?') diff --git a/src/messaging/tests/echo/echo_requester.cpp b/src/messaging/tests/echo/echo_requester.cpp index 58b827d7914d53..656f8d6e78e8a6 100644 --- a/src/messaging/tests/echo/echo_requester.cpp +++ b/src/messaging/tests/echo/echo_requester.cpp @@ -184,7 +184,7 @@ void HandleEchoResponseReceived(chip::Messaging::ExchangeContext * ec, chip::Sys gEchoRespCount++; printf("Echo Response: %" PRIu64 "/%" PRIu64 "(%.2f%%) len=%u time=%.3fs\n", gEchoRespCount, gEchoCount, - static_cast(gEchoRespCount) * 100 / gEchoCount, payload->DataLength(), + static_cast(gEchoRespCount) * 100 / static_cast(gEchoCount), payload->DataLength(), static_cast(chip::System::Clock::Milliseconds32(transitTime).count()) / 1000); } diff --git a/src/platform/Darwin/BUILD.gn b/src/platform/Darwin/BUILD.gn index 1a23fc1d1ea991..5188068b7a3036 100644 --- a/src/platform/Darwin/BUILD.gn +++ b/src/platform/Darwin/BUILD.gn @@ -36,7 +36,10 @@ config("darwin_config") { ] } - cflags = [ "-fobjc-arc" ] + cflags = [ + "-fobjc-arc", + "-Wconversion", + ] } static_library("Darwin") { @@ -140,6 +143,9 @@ static_library("logging") { ] configs += [ "${chip_root}/src:includes" ] - cflags = [ "-fobjc-arc" ] + cflags = [ + "-fobjc-arc", + "-Wconversion", + ] frameworks = [ "Foundation.framework" ] } diff --git a/src/platform/Darwin/BleConnectionDelegateImpl.mm b/src/platform/Darwin/BleConnectionDelegateImpl.mm index 6858594620257c..004a33bfb0e963 100644 --- a/src/platform/Darwin/BleConnectionDelegateImpl.mm +++ b/src/platform/Darwin/BleConnectionDelegateImpl.mm @@ -175,7 +175,8 @@ - (void)resetTimer { auto timeout = [self hasDiscriminator] ? kScanningWithDiscriminatorTimeoutInSeconds : kScanningWithoutDiscriminatorTimeoutInSeconds; - dispatch_source_set_timer(_timer, dispatch_walltime(nullptr, timeout * NSEC_PER_SEC), DISPATCH_TIME_FOREVER, 5 * NSEC_PER_SEC); + dispatch_source_set_timer( + _timer, dispatch_walltime(nullptr, static_cast(timeout * NSEC_PER_SEC)), DISPATCH_TIME_FOREVER, 5 * NSEC_PER_SEC); } // All our callback dispatch must happen on _chipWorkQueue diff --git a/src/platform/Darwin/ConnectivityManagerImpl.cpp b/src/platform/Darwin/ConnectivityManagerImpl.cpp index e78ca7dc5be8c0..e0a7711e18bbfb 100644 --- a/src/platform/Darwin/ConnectivityManagerImpl.cpp +++ b/src/platform/Darwin/ConnectivityManagerImpl.cpp @@ -24,6 +24,7 @@ #include #include +#include #include #include @@ -80,6 +81,10 @@ CHIP_ERROR ConnectivityManagerImpl::GetEthernetInterfaceName(char * outName, siz { CHIP_ERROR err = CHIP_ERROR_NOT_IMPLEMENTED; #if TARGET_OS_OSX + if (!CanCastTo(maxLen)) + { + return CHIP_ERROR_INVALID_ARGUMENT; + } CFArrayRef interfaces = SCNetworkInterfaceCopyAll(); VerifyOrReturnError(interfaces != nullptr, CHIP_ERROR_INTERNAL); @@ -102,7 +107,7 @@ CHIP_ERROR ConnectivityManagerImpl::GetEthernetInterfaceName(char * outName, siz continue; } - if (!CFStringGetCString(interfaceName, outName, maxLen, kCFStringEncodingUTF8)) + if (!CFStringGetCString(interfaceName, outName, static_cast(maxLen), kCFStringEncodingUTF8)) { continue; } diff --git a/src/platform/Darwin/DnssdHostNameRegistrar.h b/src/platform/Darwin/DnssdHostNameRegistrar.h index ae6b7efa0f937b..c3f44884767b14 100644 --- a/src/platform/Darwin/DnssdHostNameRegistrar.h +++ b/src/platform/Darwin/DnssdHostNameRegistrar.h @@ -51,7 +51,8 @@ namespace Dnssd { auto interfaceAddress = static_cast(&interface.second); auto interfaceAddressLen = sizeof(interface.second); - LogErrorOnFailure(RegisterInterface(interfaceId, type, interfaceAddress, interfaceAddressLen)); + LogErrorOnFailure( + RegisterInterface(interfaceId, type, interfaceAddress, static_cast(interfaceAddressLen))); } } diff --git a/src/platform/Darwin/WiFi/NetworkCommissioningWiFiDriver.mm b/src/platform/Darwin/WiFi/NetworkCommissioningWiFiDriver.mm index a393e79996f9c9..b1b9a763efe1c6 100644 --- a/src/platform/Darwin/WiFi/NetworkCommissioningWiFiDriver.mm +++ b/src/platform/Darwin/WiFi/NetworkCommissioningWiFiDriver.mm @@ -15,6 +15,7 @@ * limitations under the License. */ +#include #include #include #include @@ -72,18 +73,23 @@ bool Next(WiFiScanResponse & scanResponse) override void CopyNetworkInformationTo(WiFiScanResponse & destination, CWNetwork * source) { destination.security = GetWiFiSecurity(source); - destination.ssidLen = [source.ssid length]; - destination.channel = source.wlanChannel.channelNumber; + destination.channel = static_cast(source.wlanChannel.channelNumber); destination.wiFiBand = GetWiFiBand(source.wlanChannel); - destination.rssi = source.rssiValue; - CopyStringTo(destination.ssid, source.ssid, DeviceLayer::Internal::kMaxWiFiSSIDLength); - CopyStringTo(destination.bssid, source.bssid, DeviceLayer::Internal::kWiFiBSSIDLength); - } - - void CopyStringTo(uint8_t * destination, NSString * source, size_t maxLength) - { - NSData * data = [source dataUsingEncoding:NSUTF8StringEncoding]; - memcpy(destination, [data bytes], std::min([data length], maxLength)); + destination.rssi = static_cast(source.rssiValue); + + NSData * ssidData = source.ssidData; + destination.ssidLen = static_cast(std::min(ssidData.length, DeviceLayer::Internal::kMaxWiFiSSIDLength)); + memcpy(destination.ssid, ssidData.bytes, destination.ssidLen); + + // source.bssid looks like "00:00:00:00:00:00" if it's not nil. + NSString * bssid = source.bssid; + // 3 chars per byte, except the last byte. + if (bssid.length == 3 * sizeof(destination.bssid) - 1) { + const char * chars = bssid.UTF8String; + for (size_t i = 0; i < sizeof(destination.bssid); ++i) { + Encoding::HexToBytes(&chars[3 * i], 2, &destination.bssid[i], 1); + } + } } WiFiSecurity GetWiFiSecurity(CWNetwork * network)