Написал код подстановки в функцию чтения из последовательного порта:
Код
int spwf_socket_read (unsigned char* i, int ch, int timeout)
{ //
unsigned char *PacketPntr = NULL; //
static int PacketIDX = 0; //
int dataLen = 0; //
//printf("\nPacketType = %d:", PacketSwitch);//
printf("\nAsking NByte = %d:", ch); //
if(PacketSwitch == 2) //
{ //
PacketPntr = CONNACK_P; //
printf("IDX = %d:", PacketPntr); //
} //
if(PacketSwitch == 9) //
{ //
PacketPntr = SUBACK_P; //
printf("IDX = %d:", PacketPntr); //
} //
while(1) //
{ //
i[dataLen] = PacketPntr[PacketIDX++];//Кладем в буфер
printf("%02x ", i[dataLen]); //
dataLen++; //
if(dataLen >= ch) {break;} //Если принято сколько сказано (int ch) - выход
} //
return dataLen; //
} //
В первом случае (PacketSwitch == 2), код работает исправно. Во втором случае читаются нули:
Цитата
Connect to MQTT Brocker
Asking NByte = 1:IDX = 4235388:20
Asking NByte = 1:IDX = 4235388:02
Asking NByte = 2:IDX = 4235388:00 00
Connected with IBM MQTT broker
Subscribing topic: iot-2/cmd/rele/fmt/json
Asking NByte = 1:IDX = 4235392:00
Asking NByte = 1:IDX = 4235392:00
MQTTSubscribe. Timeout expired for suback reception
Массивы объявлены глобально. Можно и локально, будет то же самое.
Цитата
unsigned char CONNACK_P[4] = {0x20,0x02,0,0}; //
unsigned char SUBACK_P [4] = {0x90,0x03,0,0}; //
Сообщение отредактировал Димон Безпарольный - Aug 7 2017, 08:05