Steht doch genau da was falsch ist:
warning: address of local variable 'pointer' returned [-Wreturn-local-addr]
Du gibst die Adresse einer lokalen Variable zurück. Du übergibst ein Byte als Parameter und & ist die Adresse davon. Was genau das Gegenteil ist was du eigentlich tun willst
Das wird auch davon kommen:
warning: invalid conversion from 'const byte* {aka const unsigned char*}' to 'uint16_t {aka unsigned int}' [-fpermissive]
Adressen sind 16 Bit und die machst einen impliziten Cast auf Byte