X-Git-Url: http://git.jankratochvil.net/?p=gnokii.git;a=blobdiff_plain;f=common%2Fprotocol%2Ffbus.c;h=34c0507cb30ecffbdd17b1a878ab2c78a7192aa3;hp=87e98fe911a79814782a673d5c84337baf3a8813;hb=a51604573a1dfaaad4304ffbf918e91617acf468;hpb=ab382e3c5d243a7b1b800fbfcb3a96b6566f6360 diff --git a/common/protocol/fbus.c b/common/protocol/fbus.c index 87e98fe..34c0507 100644 --- a/common/protocol/fbus.c +++ b/common/protocol/fbus.c @@ -60,6 +60,8 @@ u8 MessageBuffer[FBUS_MAX_RECEIVE_LENGTH * 6],MultiMessageBuffer[FBUS_MAX_RECEIV u8 RequestSequenceNumber = 0x00; +int fbus_decoding=0; + #ifdef DEBUG char *N61_PrintDevice(int Device) { @@ -78,11 +80,12 @@ char *N61_PrintDevice(int Device) void N61_RX_DisplayMessage() { #ifdef DEBUG + hexdump(MessageLength-2,MessageBuffer); + fprintf(stdout, _("Msg Dest: %s\n"), N61_PrintDevice(MessageDestination)); fprintf(stdout, _("Msg Source: %s\n"), N61_PrintDevice(MessageSource)); fprintf(stdout, _("Msg Type: %02x\n"), MessageType); - - hexdump(MessageLength-2,MessageBuffer); + fprintf(stdout, _("Msg Seq: %d\n"), MessageBuffer[MessageLength-1] & 0x0f); #endif AppendLog(MessageBuffer,MessageLength-2,true); @@ -207,6 +210,9 @@ int FBUS_SendAck(u8 message_type, u8 message_seq) { unsigned char request[6]; + if (fbus_decoding) + return 0; + request[0] = message_type; request[1] = message_seq; @@ -233,7 +239,9 @@ void FBUS_Terminate(void) void FBUS_RX_StateMachine(unsigned char rx_byte) { +#if 0 static struct timeval time_now, time_last, time_diff; +#endif static int checksum[2]; @@ -263,6 +271,7 @@ void FBUS_RX_StateMachine(unsigned char rx_byte) { case FBUS_RX_Discarding: +#if 0 #ifndef VC6 gettimeofday(&time_now, NULL); timersub(&time_now, &time_last, &time_diff); @@ -272,13 +281,21 @@ void FBUS_RX_StateMachine(unsigned char rx_byte) { } /* else fall through to... */ #endif +#endif - case FBUS_RX_Sync: + case FBUS_RX_Sync: { +static int discarded=0,discarded55=0; if ((CurrentConnectionType==GCT_FBUS && rx_byte == FBUS_FRAME_ID) || ((CurrentConnectionType==GCT_Infrared || CurrentConnectionType==GCT_Tekram) && rx_byte == FBUS_IR_FRAME_ID)) { + if (discarded) { + printf("[discarded %d bytes, %d were NOT 0x55]\n",discarded,discarded-discarded55); + discarded=0; + discarded55=0; + } + BufferCount = 0; RX_State = FBUS_RX_GetDestination; @@ -289,11 +306,16 @@ void FBUS_RX_StateMachine(unsigned char rx_byte) { } else { /* Lost frame sync */ RX_State = FBUS_RX_Discarding; +#if 0 #ifndef VC6 gettimeofday(&time_last, NULL); #endif +#endif + discarded++; + if (rx_byte == 0x55) + discarded55++; } - break; + } break; case FBUS_RX_GetDestination: @@ -385,6 +407,7 @@ void FBUS_RX_StateMachine(unsigned char rx_byte) { /* Is the checksum correct? */ if (checksum[0] == checksum[1]) { +u8 msgseq; if (RX_Multiple) { @@ -406,7 +429,7 @@ void FBUS_RX_StateMachine(unsigned char rx_byte) { } MultiMessageLength=MultiMessageLength+MessageLength-2; - FBUS_SendAck(MessageType, MessageBuffer[MessageLength-1] & 0x0f); + msgseq=MessageBuffer[MessageLength-1] & 0x0f; if ((MessageLength > 1) && (MessageBuffer[MessageLength-2] != 0x01)) { @@ -420,15 +443,22 @@ void FBUS_RX_StateMachine(unsigned char rx_byte) { /* Do not debug Ack and RLP frames to detail. */ if (MessageType != FBUS_FRTYPE_ACK && MessageType != 0xf1) N61_RX_DisplayMessage(); + else { + if (MessageType == FBUS_FRTYPE_ACK) + puts("[ignoring print of ACK]"); + else + puts("[ignoring print of RLP]"); + } GSM->DispatchMessage(MessageLength-2, MessageBuffer, MessageType); } + FBUS_SendAck(MessageType, msgseq); + } else { /* We do not want to send ACK of ACKs and ACK of RLP frames. */ if (MessageType != FBUS_FRTYPE_ACK && MessageType != 0xf1) { - FBUS_SendAck(MessageType, MessageBuffer[MessageLength-1] & 0x0f); if ((MessageLength > 1) && (MessageBuffer[MessageLength-2] != 0x01)) { @@ -438,13 +468,16 @@ void FBUS_RX_StateMachine(unsigned char rx_byte) { #endif RX_State = FBUS_RX_Sync; } + + msgseq=MessageBuffer[MessageLength-1] & 0x0f; + FBUS_SendAck(MessageType, msgseq); } } } else { + msgseq=MessageBuffer[MessageLength-1] & 0x0f; /* We do not want to send ACK of ACKs and ACK of RLP frames. */ if (MessageType != FBUS_FRTYPE_ACK && MessageType != 0xf1) { - FBUS_SendAck(MessageType, MessageBuffer[MessageLength-1] & 0x0f); if ((MessageLength > 1) && (MessageBuffer[MessageLength-2] != 0x01)) { @@ -458,17 +491,23 @@ void FBUS_RX_StateMachine(unsigned char rx_byte) { } } - if (!RX_Multiple && MessageDestination!=FBUS_DEVICE_PHONE ) { + if (!RX_Multiple /* && MessageDestination!=FBUS_DEVICE_PHONE */ ) { /* Do not debug Ack and RLP frames to detail. */ if (MessageType != FBUS_FRTYPE_ACK && MessageType != 0xf1) N61_RX_DisplayMessage(); + else { + if (MessageType == FBUS_FRTYPE_ACK) + puts("[ignoring print of ACK]"); + else + puts("[ignoring print of RLP]"); + } GSM->DispatchMessage(MessageLength-2, MessageBuffer, MessageType); } #ifdef DEBUG /* When make debug and message is to phone display it */ - if (MessageDestination==FBUS_DEVICE_PHONE) { + if (MessageDestination==FBUS_DEVICE_PHONE && !fbus_decoding) { for (i=MessageLength;i>=0;i--) MessageBuffer[i+6]=MessageBuffer[i]; MessageBuffer[0]=FBUS_FRAME_ID; @@ -482,7 +521,12 @@ void FBUS_RX_StateMachine(unsigned char rx_byte) { NULL_TX_DisplayMessage(MessageLength, MessageBuffer); } #endif + if (MessageType != FBUS_FRTYPE_ACK && MessageType != 0xf1) + FBUS_SendAck(MessageType, msgseq); } +#ifdef DEBUG + putchar('\n'); +#endif } else { #ifdef DEBUG fprintf(stdout, _("Bad checksum %02x (should be %02x), msg len=%i !\n"),checksum[0],checksum[1],MessageLength);