Revision | 26dfc6ef3b846f6f37bda4a7fcdca12e3cba8fd8 (tree) |
---|---|
Zeit | 2020-10-14 23:39:04 |
Autor | Satoshi Yasuda <7m3tjz@jarl...> |
Commiter | Satoshi Yasuda |
modified: dmonitor.h
modified: dmonitor_utils.c
modified: dstar_data.c
modified: dvap.c
modified: dvmega.h
modified: dvmega_utils.c
modified: from_node.c
modified: inet_read.c
modified: main.c
modified: rig_read.c
modified: rpt_conn.h
modified: rpt_conn_dvap.c
modified: rpt_conn_send_msg.c
modified: send_msg.c
modified: send_node.c
@@ -113,6 +113,7 @@ int hole_punch_port; | ||
113 | 113 | char hole_punch_server[128]; |
114 | 114 | |
115 | 115 | unsigned char inet_frame_id[2]; |
116 | +unsigned char inet_frame_id_save[2]; | |
116 | 117 | struct timeval inet_recv_time; |
117 | 118 | struct timeval inet_recv_time_save; |
118 | 119 | struct timeval inet_recv_timeout; |
@@ -200,7 +201,6 @@ unsigned char MD5_dmonitor[32]; | ||
200 | 201 | |
201 | 202 | char rig_type; |
202 | 203 | |
203 | -int dvap_send_header_sw; | |
204 | 204 | char dvap_first_voice_pkt; |
205 | 205 | |
206 | 206 | time_t dest_keep_alive_send_time; |
@@ -298,4 +298,5 @@ time_t lcd_time_save; | ||
298 | 298 | /* misc */ |
299 | 299 | char voice_packet_save[15]; |
300 | 300 | int hole_punchd_recvd; |
301 | +int send_header_sw; | |
301 | 302 | time_t msg_send_set_time; |
@@ -13,7 +13,8 @@ int send_dest_keep_alive(void); | ||
13 | 13 | int node_usb_init (void); |
14 | 14 | void node_close (void); |
15 | 15 | void lcd_write(void); |
16 | - | |
16 | +int node_space_check (int length); | |
17 | +int check_getFifo(void); | |
17 | 18 | extern char dummy_frame_1[12]; |
18 | 19 | extern char dummy_frame_2[12]; |
19 | 20 | extern char dummy_frame_3[12]; |
@@ -360,6 +361,12 @@ int send_rig (void) | ||
360 | 361 | int length; |
361 | 362 | int rate; |
362 | 363 | |
364 | + if (rig_type == NODE) | |
365 | + { | |
366 | + length = check_getFifo(); | |
367 | + if (!node_space_check (length)) return TRUE; | |
368 | + } | |
369 | + | |
363 | 370 | length = getFifo (&send_buff[3]); |
364 | 371 | if (length == 0) |
365 | 372 | { |
@@ -374,7 +381,7 @@ int send_rig (void) | ||
374 | 381 | } |
375 | 382 | else if (length == 13) |
376 | 383 | { |
377 | - #if 0 | |
384 | + #if 0 | |
378 | 385 | syslog (LOG_DEBUG, "%2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x", |
379 | 386 | send_buff[3], send_buff[4], send_buff[5], send_buff[6], send_buff[7], send_buff[8], send_buff[9], send_buff[10], |
380 | 387 | send_buff[11], send_buff[12], send_buff[13], send_buff[14], send_buff[15]); |
@@ -387,9 +394,9 @@ int send_rig (void) | ||
387 | 394 | rig_write (17, send_buff); |
388 | 395 | if (send_buff[3] & 0x40) |
389 | 396 | { |
390 | - #ifdef _DEBUG | |
397 | + //#ifdef _DEBUG | |
391 | 398 | syslog (LOG_INFO, "Fifo_cnt (last frame) %d", Fifo_cnt); |
392 | - #endif | |
399 | + //#endif | |
393 | 400 | if (Fifo_cnt < fifo_hold) |
394 | 401 | { |
395 | 402 | rig_send_sw = FALSE; |
@@ -445,12 +452,25 @@ void LastFrameSend (void) | ||
445 | 452 | |
446 | 453 | } |
447 | 454 | |
455 | +int check_getFifo (void) | |
456 | +{ | |
457 | + struct FifoPkt *tmp; | |
458 | + | |
459 | + if (Rp->next == NULL) return 0; | |
460 | + tmp = Rp->next; | |
461 | + return tmp->length; | |
462 | +} | |
463 | + | |
448 | 464 | int getFifo (char pkt[]) |
449 | 465 | { |
450 | 466 | struct FifoPkt *tmp; |
451 | 467 | int len; |
452 | 468 | |
453 | - if (Rp->next == NULL) return 0; | |
469 | + if (Rp->next == NULL) | |
470 | + { | |
471 | + Fifo_cnt = 0; | |
472 | + return 0; | |
473 | + } | |
454 | 474 | tmp = Rp; |
455 | 475 | Rp = Rp->next; |
456 | 476 | len = Rp->length; |
@@ -466,7 +486,7 @@ int getFifo (char pkt[]) | ||
466 | 486 | void putFifo (int len, unsigned char pkt[]) |
467 | 487 | { |
468 | 488 | struct FifoPkt *ret; |
469 | - | |
489 | +//syslog(LOG_DEBUG, "putFifo %d %2.2x %2.2x %2.2x", len, pkt[0], pkt[1], pkt[2]); | |
470 | 490 | #ifdef _DEBUG |
471 | 491 | syslog (LOG_INFO, "putFifo len:%d %2.2x", len, pkt[0]); |
472 | 492 | #endif |
@@ -700,11 +720,13 @@ void dmonitor_close (void) | ||
700 | 720 | (struct sockaddr *)&in_addr, sizeof(in_addr)); |
701 | 721 | } |
702 | 722 | |
723 | +#if 0 | |
703 | 724 | void jitter_buff_init(void) |
704 | 725 | { |
705 | 726 | int n; |
706 | 727 | |
707 | 728 | jitter_rd_pnt = 0; |
729 | + jitter_wr_pnt = 0; | |
708 | 730 | jitter_wr_cnt = 0; |
709 | 731 | |
710 | 732 | for (n = 0 ; n < 21 ; n++) |
@@ -717,6 +739,9 @@ void jitter_buff_init(void) | ||
717 | 739 | |
718 | 740 | void jitter_put (unsigned char buff[]) |
719 | 741 | { |
742 | + | |
743 | +//syslog (LOG_DEBUG, "jitter put %2.2x %2.2x", buff[0], buff[1]); | |
744 | + //if (rig_last_frame_send) return; | |
720 | 745 | jitter_wr_pnt = buff[0] & 0x1f; |
721 | 746 | if (jitter_wr_pnt > 20) return; |
722 | 747 | if (jitter_wr_pnt) |
@@ -726,7 +751,8 @@ void jitter_put (unsigned char buff[]) | ||
726 | 751 | jitter_wr_cnt++; |
727 | 752 | if (jitter_wr_cnt < 0) jitter_wr_pnt = 0; |
728 | 753 | #ifdef _DEBUG_JITTER |
729 | - syslog (LOG_INFO, "jitter put %d %d", jitter_wr_pnt, jitter_wr_cnt); | |
754 | + syslog (LOG_INFO, "jitter put %d %d %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x", jitter_wr_pnt, jitter_wr_cnt, | |
755 | + buff[0], buff[1], buff[2], buff[3], buff[4], buff[5], buff[6],buff[7],buff[8],buff[9],buff[10], buff[11],buff[12]); | |
730 | 756 | #endif |
731 | 757 | jitter_putFifo(); |
732 | 758 | } |
@@ -734,14 +760,18 @@ void jitter_put (unsigned char buff[]) | ||
734 | 760 | void jitter_putFifo (void) |
735 | 761 | { |
736 | 762 | int k, n; |
763 | + int jitter_n; | |
737 | 764 | |
765 | +//syslog (LOG_DEBUG, "debug 100 %2.2x %2.2x", jitter_wr_pnt, jitter_rd_pnt); | |
738 | 766 | if ((jitter_buff[jitter_wr_pnt][0] != 0xff) && (jitter_buff[jitter_wr_pnt][0] & 0x40)) |
739 | 767 | { |
740 | 768 | #ifdef _DEBUG_JITTER |
741 | 769 | syslog(LOG_DEBUG, "last freame in jitter"); |
742 | 770 | #endif |
771 | +syslog (LOG_DEBUG, "200 %2.2x %2.2x", jitter_wr_pnt, jitter_rd_pnt); | |
743 | 772 | while (jitter_wr_pnt != jitter_rd_pnt) |
744 | 773 | { |
774 | +syslog (LOG_DEBUG, "210 %2.2x %2.2x", jitter_wr_pnt, jitter_rd_pnt); | |
745 | 775 | if (jitter_buff[jitter_rd_pnt][0] == 0xff) |
746 | 776 | { |
747 | 777 | jitter_buff[jitter_rd_pnt][0] = jitter_rd_pnt; |
@@ -758,20 +788,25 @@ void jitter_putFifo (void) | ||
758 | 788 | putFifo (13, &jitter_buff[jitter_wr_pnt][0]); |
759 | 789 | jitter_buff[jitter_wr_pnt][0] = 0xff; |
760 | 790 | jitter_rd_pnt++; |
791 | + jitter_wr_pnt = jitter_rd_pnt; | |
761 | 792 | if (jitter_rd_pnt > 20) jitter_rd_pnt = 0; |
762 | 793 | digitalWrite (INET_LED, 0); |
763 | 794 | digitalWrite (RIG_LED, 0); |
795 | + rig_last_frame_send = TRUE; | |
764 | 796 | return; |
765 | 797 | } |
766 | - while (jitter_buff[jitter_rd_pnt][0] != 0xff) | |
798 | + while ((jitter_buff[jitter_rd_pnt][0] != 0xff) && !(jitter_buff[jitter_rd_pnt][0] & 0x40)) | |
767 | 799 | { |
800 | +syslog (LOG_DEBUG, "jitter putFifo %d", jitter_rd_pnt); | |
768 | 801 | putFifo (13, &jitter_buff[jitter_rd_pnt][0]); |
769 | 802 | jitter_buff[jitter_rd_pnt][0] = 0xff; |
770 | 803 | if (jitter_rd_pnt == 0) memcpy (&jitter_buff[jitter_rd_pnt][1], NullVoice, 12); |
771 | 804 | else memcpy (&jitter_buff[jitter_rd_pnt][1], NullVoice1, 12); |
805 | + //jitter_wr_pnt = jitter_rd_pnt; | |
772 | 806 | jitter_rd_pnt++; |
773 | 807 | if (jitter_rd_pnt > 20) jitter_rd_pnt = 0; |
774 | 808 | jitter_wr_cnt--; |
809 | + if (jitter_wr_cnt < 0) jitter_wr_cnt = 0; | |
775 | 810 | } |
776 | 811 | #ifdef _DEBUG_JITTER |
777 | 812 | syslog (LOG_INFO, "debug %d %d", jitter_wr_pnt, jitter_rd_pnt); |
@@ -785,6 +820,7 @@ void jitter_putFifo (void) | ||
785 | 820 | if (((jitter_wr_pnt + 1) != jitter_rd_pnt) && ((jitter_wr_pnt + 1) != (jitter_rd_pnt + 21))) |
786 | 821 | { |
787 | 822 | k = jitter_wr_pnt; |
823 | +syslog (LOG_DEBUG, "debug 100 %d", jitter_rd_pnt); | |
788 | 824 | while (k != jitter_rd_pnt) |
789 | 825 | { |
790 | 826 | if (jitter_buff[k][0] != 0xff) |
@@ -796,26 +832,31 @@ void jitter_putFifo (void) | ||
796 | 832 | k--; |
797 | 833 | if (k < 0) k = 20; |
798 | 834 | } |
835 | +syslog (LOG_DEBUG, "debug 110 %d", jitter_rd_pnt); | |
799 | 836 | #ifdef _DEBUG_JITTER |
800 | 837 | syslog (LOG_INFO, "n:%d\n", n); |
801 | 838 | #endif |
802 | 839 | } |
803 | 840 | if (n > 4) |
804 | 841 | { |
805 | - while (jitter_rd_pnt != jitter_wr_pnt) | |
842 | + jitter_n = jitter_rd_pnt; | |
843 | + while (jitter_n != jitter_wr_pnt) | |
806 | 844 | { |
807 | - if (jitter_buff[jitter_rd_pnt][0] == 0xff) inet_read_drop_cnt++; | |
808 | - jitter_buff[jitter_rd_pnt][0] = jitter_rd_pnt; | |
809 | - putFifo (13, &jitter_buff[jitter_rd_pnt][0]); | |
810 | - jitter_buff[jitter_rd_pnt][0] = 0xff; | |
811 | - if (jitter_rd_pnt == 0) memcpy (&jitter_buff[jitter_rd_pnt][1], NullVoice, 12); | |
812 | - else memcpy (&jitter_buff[jitter_rd_pnt][1], NullVoice1, 12); | |
813 | - jitter_rd_pnt++; | |
814 | - if (jitter_rd_pnt > 20) jitter_rd_pnt = 0; | |
845 | + if (jitter_buff[jitter_n][0] == 0xff) inet_read_drop_cnt++; | |
846 | + jitter_buff[jitter_n][0] = jitter_n; | |
847 | +syslog (LOG_DEBUG, "test %d %d", jitter_n, jitter_wr_pnt); | |
848 | + putFifo (13, &jitter_buff[jitter_n][0]); | |
849 | + jitter_buff[jitter_n][0] = 0xff; | |
850 | + if (jitter_n == 0) memcpy (&jitter_buff[jitter_n][1], NullVoice, 12); | |
851 | + else memcpy (&jitter_buff[jitter_n][1], NullVoice1, 12); | |
852 | + jitter_n++; | |
853 | + if (jitter_n > 20) jitter_n = 0; | |
815 | 854 | } |
816 | - jitter_wr_cnt = 0; | |
855 | + //jitter_wr_cnt = 0; | |
817 | 856 | } |
857 | +syslog (LOG_DEBUG, "debug 120 %d", jitter_rd_pnt); | |
818 | 858 | } |
859 | +#endif | |
819 | 860 | |
820 | 861 | void drop_rate_print (void) |
821 | 862 | { |
@@ -833,7 +874,6 @@ void drop_rate_print (void) | ||
833 | 874 | sprintf (str, "drop packet rate %d,%02d%% (%ld/%ld)", |
834 | 875 | rate/100, rate%100, inet_read_drop_cnt, inet_read_cnt); |
835 | 876 | drop_rate_msg (str); |
836 | - jitter_rd_pnt = 0; | |
837 | 877 | digitalWrite (INET_LED, 0); |
838 | 878 | digitalWrite (RIG_LED, 0); |
839 | 879 | } |
@@ -902,3 +942,119 @@ int ja_check (unsigned char callsign[]) | ||
902 | 942 | } |
903 | 943 | return FALSE; |
904 | 944 | } |
945 | + | |
946 | +void jitter_buff_init(void) | |
947 | +{ | |
948 | + int n; | |
949 | + | |
950 | + jitter_rd_pnt = 0; | |
951 | + jitter_wr_cnt = 0; | |
952 | + | |
953 | + for (n = 0 ; n < 21 ; n++) | |
954 | + { | |
955 | + jitter_buff[n][0] = 0xff; | |
956 | + if (n == 0) memcpy (&jitter_buff[n][1], NullVoice, 12); | |
957 | + else memcpy (&jitter_buff[n][1], NullVoice1, 12); | |
958 | + } | |
959 | +} | |
960 | + | |
961 | +void jitter_put (unsigned char buff[]) | |
962 | +{ | |
963 | + jitter_wr_pnt = buff[0] & 0x1f; | |
964 | + if (jitter_wr_pnt > 20) return; | |
965 | + if (jitter_wr_pnt) | |
966 | + memcpy (&jitter_buff[jitter_wr_pnt][0], buff, 13); | |
967 | + else | |
968 | + memcpy (&jitter_buff[jitter_wr_pnt][0], buff, 10); | |
969 | + jitter_wr_cnt++; | |
970 | + if (jitter_wr_cnt < 0) jitter_wr_cnt = 0; | |
971 | + #ifdef _DEBUG_JITTER | |
972 | + syslog (LOG_INFO, "jitter put %d %d", jitter_wr_pnt, jitter_wr_cnt); | |
973 | + #endif | |
974 | + jitter_putFifo(); | |
975 | +} | |
976 | + | |
977 | +void jitter_putFifo (void) | |
978 | +{ | |
979 | + int k, n; | |
980 | + | |
981 | + if ((jitter_buff[jitter_wr_pnt][0] != 0xff) && (jitter_buff[jitter_wr_pnt][0] & 0x40)) | |
982 | + { | |
983 | + #ifdef _DEBUG_JITTER | |
984 | + syslog(LOG_DEBUG, "last freame in jitter"); | |
985 | + #endif | |
986 | + while (jitter_wr_pnt != jitter_rd_pnt) | |
987 | + { | |
988 | + if (jitter_buff[jitter_rd_pnt][0] == 0xff) | |
989 | + { | |
990 | + jitter_buff[jitter_rd_pnt][0] = jitter_rd_pnt; | |
991 | + inet_read_drop_cnt++; | |
992 | + syslog (LOG_INFO, "packet loss (drop) %2.2x", jitter_rd_pnt); | |
993 | + } | |
994 | + putFifo (13, &jitter_buff[jitter_rd_pnt][0]); | |
995 | + jitter_buff[jitter_rd_pnt][0] = 0xff; | |
996 | + if (jitter_rd_pnt == 0) memcpy (&jitter_buff[jitter_rd_pnt][1], NullVoice, 12); | |
997 | + else memcpy (&jitter_buff[jitter_rd_pnt][1], NullVoice1, 12); | |
998 | + jitter_rd_pnt++; | |
999 | + if (jitter_rd_pnt > 20) jitter_rd_pnt = 0; | |
1000 | + } | |
1001 | + putFifo (13, &jitter_buff[jitter_wr_pnt][0]); | |
1002 | + jitter_buff[jitter_wr_pnt][0] = 0xff; | |
1003 | + jitter_rd_pnt = 0; | |
1004 | + digitalWrite (INET_LED, 0); | |
1005 | + digitalWrite (RIG_LED, 0); | |
1006 | + return; | |
1007 | + } | |
1008 | + while (jitter_buff[jitter_rd_pnt][0] != 0xff) | |
1009 | + { | |
1010 | + putFifo (13, &jitter_buff[jitter_rd_pnt][0]); | |
1011 | + jitter_buff[jitter_rd_pnt][0] = 0xff; | |
1012 | + if (jitter_rd_pnt == 0) memcpy (&jitter_buff[jitter_rd_pnt][1], NullVoice, 12); | |
1013 | + else memcpy (&jitter_buff[jitter_rd_pnt][1], NullVoice1, 12); | |
1014 | + jitter_rd_pnt++; | |
1015 | + if (jitter_rd_pnt > 20) jitter_rd_pnt = 0; | |
1016 | + jitter_wr_cnt--; | |
1017 | + } | |
1018 | + #ifdef _DEBUG_JITTER | |
1019 | + syslog (LOG_INFO, "debug %d %d", jitter_wr_pnt, jitter_rd_pnt); | |
1020 | + syslog (LOG_INFO, "%2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x", | |
1021 | + jitter_buff[0][0], jitter_buff[1][0],jitter_buff[2][0],jitter_buff[3][0],jitter_buff[4][0], | |
1022 | + jitter_buff[5][0],jitter_buff[6][0],jitter_buff[7][0],jitter_buff[8][0],jitter_buff[8][0],jitter_buff[10][0], | |
1023 | + jitter_buff[11][0], jitter_buff[12][0],jitter_buff[13][0],jitter_buff[14][0],jitter_buff[15][0], | |
1024 | + jitter_buff[16][0],jitter_buff[17][0],jitter_buff[18][0],jitter_buff[19][0],jitter_buff[20][0]); | |
1025 | + #endif | |
1026 | + n = 0; | |
1027 | + if (((jitter_wr_pnt + 1) != jitter_rd_pnt) && ((jitter_wr_pnt + 1) != (jitter_rd_pnt + 21))) | |
1028 | + { | |
1029 | + k = jitter_wr_pnt; | |
1030 | + while (k != jitter_rd_pnt) | |
1031 | + { | |
1032 | + if (jitter_buff[k][0] != 0xff) | |
1033 | + { | |
1034 | + n++; | |
1035 | + } | |
1036 | + else | |
1037 | + break; | |
1038 | + k--; | |
1039 | + if (k < 0) k = 20; | |
1040 | + } | |
1041 | + #ifdef _DEBUG_JITTER | |
1042 | + syslog (LOG_INFO, "n:%d\n", n); | |
1043 | + #endif | |
1044 | + } | |
1045 | + if (n > 4) | |
1046 | + { | |
1047 | + while (jitter_rd_pnt != jitter_wr_pnt) | |
1048 | + { | |
1049 | + if (jitter_buff[jitter_rd_pnt][0] == 0xff) inet_read_drop_cnt++; | |
1050 | + jitter_buff[jitter_rd_pnt][0] = jitter_rd_pnt; | |
1051 | + putFifo (13, &jitter_buff[jitter_rd_pnt][0]); | |
1052 | + jitter_buff[jitter_rd_pnt][0] = 0xff; | |
1053 | + if (jitter_rd_pnt == 0) memcpy (&jitter_buff[jitter_rd_pnt][1], NullVoice, 12); | |
1054 | + else memcpy (&jitter_buff[jitter_rd_pnt][1], NullVoice1, 12); | |
1055 | + jitter_rd_pnt++; | |
1056 | + if (jitter_rd_pnt > 20) jitter_rd_pnt = 0; | |
1057 | + } | |
1058 | + jitter_wr_cnt = 0; | |
1059 | + } | |
1060 | +} |
@@ -51,6 +51,7 @@ void short_msg_wrt (void) | ||
51 | 51 | |
52 | 52 | void alt_header_set (unsigned char buff[], unsigned char alt_hdr[], int inet) |
53 | 53 | { |
54 | +return; | |
54 | 55 | if ((inet_frame_id[0] == 0x00) && (inet_frame_id[1] == 0x00)) |
55 | 56 | { |
56 | 57 | syslog (LOG_INFO, "alter header set"); |
@@ -62,29 +63,12 @@ void alt_header_set (unsigned char buff[], unsigned char alt_hdr[], int inet) | ||
62 | 63 | if (((buff[7] & ZR) && !memcmp (area_call, &alt_hdr[11], 8)) || scan_sw |
63 | 64 | || ((buff[7] & GW) && !memcmp (area_call, &alt_hdr[3], 8))) |
64 | 65 | { |
65 | - memcpy (inet_frame_id, &buff[14], 2); | |
66 | + memcpy (inet_frame_id_save, &buff[14], 2); | |
66 | 67 | send_buff[0] = 0x29; |
67 | 68 | send_buff[1] = 0x20, |
68 | 69 | memcpy (&send_buff[2], alt_hdr, 39); |
69 | 70 | send_buff[41] = 0xff; |
70 | 71 | header_store (send_buff); |
71 | - putFifo (42, send_buff); | |
72 | - recv_frame_seq = 20; | |
73 | - gettimeofday (&inet_recv_time, NULL); | |
74 | - rig_last_frame_send = FALSE; | |
75 | - inet_read_cnt = 0; | |
76 | - inet_read_drop_cnt = 0; | |
77 | - jitter_max = 0; | |
78 | - jitter_min = 500000; | |
79 | - jitter_ave = 0; | |
80 | - #ifdef _SPECIFICATION_CHECK | |
81 | - memset (voice_packet_save, 0xff, 15); | |
82 | - #endif | |
83 | - memset (short_msg, 0x20, 20); | |
84 | - memcpy (used_call, &alt_hdr[27], 8); | |
85 | - memcpy (used_call2, &alt_hdr[35], 4); | |
86 | - short_msg_wrt(); | |
87 | - send_msg_sw = FALSE; | |
88 | 72 | } |
89 | 73 | if (!scan_sw) |
90 | 74 | { |
@@ -143,46 +127,9 @@ void dstar_data (unsigned char string[], int inet) | ||
143 | 127 | memcpy (&short_msg[15], &data_temp[0], 5); |
144 | 128 | short_msg_wrt(); |
145 | 129 | break; |
146 | - | |
147 | - case 0x51: | |
148 | - n = (string[16] - code_sq) / 2 - 1; | |
149 | - if (n != 8) break; | |
150 | - alt_header[40] = data_temp[0]; | |
151 | - crc_dstar_ffff = 0xffff; | |
152 | - for (n = 0 ; n < 39 ; n++) | |
153 | - { | |
154 | - crc_dstar_ffff = update_crc_dstar (crc_dstar_ffff, alt_header[n]); | |
155 | - } | |
156 | - crc_dstar_ffff = result_crc_dstar(crc_dstar_ffff); | |
157 | - if ((alt_header[39] == (crc_dstar_ffff >> 8)) && (alt_header[40] == (crc_dstar_ffff & 0xff))) | |
158 | - { | |
159 | - //syslog (LOG_INFO, "crc ok"); | |
160 | - alt_header_set (string, alt_header, inet); | |
161 | - } | |
162 | - #if 0 | |
163 | - syslog (LOG_INFO, "%4.4x", crc_dstar_ffff); | |
164 | - syslog (LOG_INFO, "%2.2x %2.2x %2.2x %36.36s %2.2x %2.2x", | |
165 | - alt_header[0], alt_header[1], alt_header[2], | |
166 | - &alt_header[3], alt_header[39], alt_header[40]); | |
167 | - #endif | |
168 | - break; | |
169 | - | |
170 | - case 0xc2: | |
171 | - code_sq = 2; | |
172 | - break; | |
173 | - | |
174 | - case 0x55: | |
175 | - n = (string[16] - code_sq) / 2 - 1; | |
176 | - if ((n < 0) || (n > 7)) break; | |
177 | - memcpy (&alt_header[n*5], &data_temp[0], 5); | |
178 | - break; | |
179 | 130 | } |
180 | 131 | } |
181 | 132 | } |
182 | - else | |
183 | - { | |
184 | - code_sq = 0; | |
185 | - } | |
186 | 133 | } |
187 | 134 | |
188 | 135 | void rig_alt_header_set (unsigned char alt_hdr[]) |
@@ -191,6 +138,7 @@ void rig_alt_header_set (unsigned char alt_hdr[]) | ||
191 | 138 | unsigned short int crc; |
192 | 139 | |
193 | 140 | if (!rig_status_check()) return; |
141 | + if (send_header_sw) return; | |
194 | 142 | |
195 | 143 | if (!scan_sw) syslog (LOG_NOTICE, "Alt header %8.8s from rig", &alt_hdr[27]); |
196 | 144 | else |
@@ -262,4 +210,74 @@ void rig_alt_header_set (unsigned char alt_hdr[]) | ||
262 | 210 | seq = 0; |
263 | 211 | } |
264 | 212 | |
213 | +void dstar_alt_header (unsigned char string[], int inet) | |
214 | +{ | |
215 | + unsigned short int crc_dstar_ffff; | |
216 | + int n; | |
217 | + | |
218 | + if (string[16] != 0) | |
219 | + { | |
220 | + if (string[16] & 0x40) // Last Frame | |
221 | + { | |
222 | + return; | |
223 | + } | |
224 | + | |
225 | + if (string[16] % 2) | |
226 | + { | |
227 | + mini_header | |
228 | + = string[26] ^ 0x70; | |
229 | + data_temp[0] | |
230 | + = string[27] ^ 0x4f; | |
231 | + data_temp[1] | |
232 | + = string[28] ^ 0x93; | |
233 | + } | |
234 | + else | |
235 | + { | |
236 | + data_temp[2] | |
237 | + = string[26] ^ 0x70; | |
238 | + data_temp[3] | |
239 | + = string[27] ^ 0x4f; | |
240 | + data_temp[4] | |
241 | + = string[28] ^ 0x93; | |
242 | + switch (mini_header) | |
243 | + { | |
244 | + case 0x51: | |
245 | + n = (string[16] - code_sq) / 2 - 1; | |
246 | + if (n != 8) break; | |
247 | + alt_header[40] = data_temp[0]; | |
248 | + crc_dstar_ffff = 0xffff; | |
249 | + for (n = 0 ; n < 39 ; n++) | |
250 | + { | |
251 | + crc_dstar_ffff = update_crc_dstar (crc_dstar_ffff, alt_header[n]); | |
252 | + } | |
253 | + crc_dstar_ffff = result_crc_dstar(crc_dstar_ffff); | |
254 | + if ((alt_header[39] == (crc_dstar_ffff >> 8)) && (alt_header[40] == (crc_dstar_ffff & 0xff))) | |
255 | + { | |
256 | + //syslog (LOG_INFO, "crc ok"); | |
257 | + alt_header_set (string, alt_header, inet); | |
258 | + } | |
259 | + #if 0 | |
260 | + syslog (LOG_INFO, "%4.4x", crc_dstar_ffff); | |
261 | + syslog (LOG_INFO, "%2.2x %2.2x %2.2x %36.36s %2.2x %2.2x", | |
262 | + alt_header[0], alt_header[1], alt_header[2], | |
263 | + &alt_header[3], alt_header[39], alt_header[40]); | |
264 | + #endif | |
265 | + break; | |
266 | + | |
267 | + case 0xc2: | |
268 | + code_sq = 2; | |
269 | + break; | |
265 | 270 | |
271 | + case 0x55: | |
272 | + n = (string[16] - code_sq) / 2 - 1; | |
273 | + if ((n < 0) || (n > 7)) break; | |
274 | + memcpy (&alt_header[n*5], &data_temp[0], 5); | |
275 | + break; | |
276 | + } | |
277 | + } | |
278 | + } | |
279 | + else | |
280 | + { | |
281 | + code_sq = 0; | |
282 | + } | |
283 | +} |
@@ -9,6 +9,7 @@ void send_dvap_keep_alive(void); | ||
9 | 9 | int inet_send_buff_set(void); |
10 | 10 | void inet_led_onoff(void); |
11 | 11 | void dstar_data(unsigned char string[], int inet); |
12 | +void dstar_alt_header (unsigned char string[], int inet); | |
12 | 13 | void short_msg_wrt (void); |
13 | 14 | void send_msg (unsigned char str[], unsigned char my2[]); |
14 | 15 | int cmd_check (unsigned char cmd[]); |
@@ -633,6 +634,7 @@ void dvap_send_header (void) | ||
633 | 634 | memcpy (used_call, &inet_send_buff[44], 8); |
634 | 635 | memcpy (used_call2, &inet_send_buff[52], 4); |
635 | 636 | short_msg_wrt (); |
637 | + send_header_sw = TRUE; | |
636 | 638 | if (gw_on) |
637 | 639 | { |
638 | 640 | memcpy (&inet_send_buff[20], zone_call, 8); |
@@ -662,8 +664,13 @@ void dvap_send_header (void) | ||
662 | 664 | void dvap_send_voice (void) |
663 | 665 | { |
664 | 666 | int length; |
665 | - | |
666 | - //if (!dvap_voice_send_sw) return; | |
667 | + if (!send_header_sw) | |
668 | + { | |
669 | + inet_send_buff[16] = dvap_voice[4]; | |
670 | + memcpy (&inet_send_buff[17], &dvap_voice[6], 12); | |
671 | + dstar_alt_header (inet_send_buff, FALSE); | |
672 | + return; | |
673 | + } | |
667 | 674 | |
668 | 675 | inet_send_buff[9] = 0x13; |
669 | 676 | inet_send_buff[4] = (m_seq >> 8) & 0xff; |
@@ -724,7 +731,7 @@ void dvap_write (int fd, unsigned char buff[], int length) | ||
724 | 731 | |
725 | 732 | if (length == 42) |
726 | 733 | { |
727 | - if (!dvap_send_header_sw) | |
734 | + if (!send_header_sw) | |
728 | 735 | { |
729 | 736 | time(&dvap_keep_alive); |
730 | 737 | dvap_send_pkt[0] = 0x2f; |
@@ -736,24 +743,25 @@ void dvap_write (int fd, unsigned char buff[], int length) | ||
736 | 743 | memcpy (&dvap_send_pkt[6], &buff[2], 41); |
737 | 744 | dvap_send_pkt[6] &= 0x07; |
738 | 745 | ret = write (fd, dvap_send_pkt, 47); |
739 | - dvap_send_pkt[4] = 0x00; | |
740 | - dvap_send_pkt[5]++; | |
741 | - dvap_send_header_sw = TRUE; | |
746 | + //dvap_send_pkt[4] = 0x00; | |
747 | + //dvap_send_pkt[5]++; | |
748 | + | |
749 | + send_header_sw = TRUE; | |
742 | 750 | dvap_first_voice_pkt = TRUE; |
743 | 751 | syslog (LOG_DEBUG, "to DVAP rpt2:%8.8s rpt1:%8.8s ur:%8.8s my:%8.8s my2:%4.4s", &buff[5], &buff[13],&buff[21], &buff[29], &buff[37]); |
744 | -#ifdef _DEBUG_DVAP_SEND | |
752 | +//#ifdef _DEBUG_DVAP_SEND | |
745 | 753 | syslog (LOG_DEBUG, "%2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x", |
746 | 754 | dvap_send_pkt[0],dvap_send_pkt[1],dvap_send_pkt[2],dvap_send_pkt[3], dvap_send_pkt[4],dvap_send_pkt[5],dvap_send_pkt[6], dvap_send_pkt[7],dvap_send_pkt[8],dvap_send_pkt[9], dvap_send_pkt[10],dvap_send_pkt[11],dvap_send_pkt[12], dvap_send_pkt[13],dvap_send_pkt[14],dvap_send_pkt[15]); |
747 | 755 | syslog (LOG_DEBUG, "%2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x", |
748 | 756 | dvap_send_pkt[16],dvap_send_pkt[17],dvap_send_pkt[18],dvap_send_pkt[19], dvap_send_pkt[20],dvap_send_pkt[21],dvap_send_pkt[22], dvap_send_pkt[23],dvap_send_pkt[24],dvap_send_pkt[25], dvap_send_pkt[26],dvap_send_pkt[27],dvap_send_pkt[28], dvap_send_pkt[29],dvap_send_pkt[30],dvap_send_pkt[31]); |
749 | 757 | syslog (LOG_DEBUG, "%2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x", |
750 | 758 | dvap_send_pkt[32],dvap_send_pkt[33],dvap_send_pkt[34],dvap_send_pkt[35], dvap_send_pkt[36],dvap_send_pkt[37],dvap_send_pkt[38], dvap_send_pkt[39],dvap_send_pkt[40],dvap_send_pkt[41], dvap_send_pkt[42],dvap_send_pkt[43],dvap_send_pkt[44], dvap_send_pkt[45],dvap_send_pkt[46],dvap_send_pkt[47]); |
751 | -#endif | |
759 | +//#endif | |
752 | 760 | } |
753 | 761 | } |
754 | 762 | else if (length == 17) |
755 | 763 | { |
756 | - if (dvap_send_header_sw) | |
764 | + if (send_header_sw) | |
757 | 765 | { |
758 | 766 | |
759 | 767 | if (!dvap_first_voice_pkt || !memcmp (&buff[13], resync , 3)) |
@@ -761,22 +769,22 @@ syslog (LOG_DEBUG, "%2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x | ||
761 | 769 | time(&dvap_keep_alive); |
762 | 770 | dvap_send_pkt[0] = 0x12; |
763 | 771 | dvap_send_pkt[1] = 0xc0; |
764 | - memcpy (&dvap_send_pkt[6], &buff[4], 12); | |
765 | - if ((dvap_send_pkt[4] & 0x40) || | |
772 | + memcpy (&dvap_send_pkt[5], &buff[3], 13); | |
773 | + if ((dvap_send_pkt[5] & 0x40) || | |
766 | 774 | (!memcmp (&dvap_send_pkt[6], &lastframe[3], 3) && !memcmp (&dvap_send_pkt[15], lastframe, 3))) |
767 | 775 | { |
768 | - dvap_send_pkt[4] |= 0x40; | |
769 | - dvap_send_header_sw = FALSE; | |
776 | + dvap_send_pkt[5] |= 0x40; | |
777 | + send_header_sw = FALSE; | |
770 | 778 | } |
771 | 779 | ret = write (fd, dvap_send_pkt, 18); |
772 | - dvap_send_pkt[5]++; | |
780 | + //dvap_send_pkt[5]++; | |
773 | 781 | dvap_send_pkt[4]++; |
774 | - if (dvap_send_pkt[4] == 21) dvap_send_pkt[4] = 0; | |
782 | + //if (dvap_send_pkt[4] == 21) dvap_send_pkt[4] = 0; | |
775 | 783 | dvap_first_voice_pkt = FALSE; |
776 | -#ifdef _DEBUG_DVAP_SEND | |
784 | +//#ifdef _DEBUG_DVAP_SEND | |
777 | 785 | syslog (LOG_DEBUG, "%2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x", |
778 | 786 | dvap_send_pkt[0], dvap_send_pkt[1], dvap_send_pkt[2], dvap_send_pkt[3], dvap_send_pkt[4], dvap_send_pkt[5], dvap_send_pkt[6], dvap_send_pkt[7], dvap_send_pkt[8], dvap_send_pkt[9], dvap_send_pkt[10], dvap_send_pkt[11], dvap_send_pkt[12], dvap_send_pkt[13], dvap_send_pkt[14], dvap_send_pkt[15], dvap_send_pkt[16], dvap_send_pkt[17]); |
779 | -#endif | |
787 | +//#endif | |
780 | 788 | } |
781 | 789 | } |
782 | 790 | } |
@@ -24,6 +24,7 @@ int dvmega_last_frame_sw; | ||
24 | 24 | int dvmega_sw; |
25 | 25 | int dvmega_gw_resp_sw; |
26 | 26 | int dvmega_NoRespReply_sw; |
27 | +int dvmega_send_header_sw; | |
27 | 28 | |
28 | 29 | //unsigned char dvmega_squelch; |
29 | 30 |
@@ -8,6 +8,7 @@ void inet_led_onoff(void); | ||
8 | 8 | int inet_send_buff_set(void); |
9 | 9 | void short_msg_wrt(void); |
10 | 10 | void dstar_data (unsigned char string[], int inet); |
11 | +void dstar_alt_header (unsigned char string[], int inet); | |
11 | 12 | void rig_buff_reset (int length); |
12 | 13 | unsigned short int crc_calc (unsigned char string[], int length); |
13 | 14 | int cmd_check (unsigned char cmd[]); |
@@ -17,7 +18,7 @@ int rig_status_check (void); | ||
17 | 18 | char lastframe1[3] = {0x55, 0x55, 0x55}; |
18 | 19 | char lastframe2[3] = {0x55, 0xc8, 0x7a}; |
19 | 20 | int dvmega_last_frame_sw; |
20 | - | |
21 | +extern unsigned char resync[]; | |
21 | 22 | |
22 | 23 | void dvmega_write (int fd, unsigned char buff[], int length) |
23 | 24 | { |
@@ -148,6 +149,7 @@ void dvmega_read (void) | ||
148 | 149 | if (memcmp (&inet_send_buff[36], "CQCQCQ ", 8)) gw_on = TRUE; |
149 | 150 | if (send_sw && !rig_send_sw) |
150 | 151 | { |
152 | + send_header_sw = TRUE; | |
151 | 153 | memset (inet_frame_id, 0xff, 2); |
152 | 154 | dvmega_last_frame_sw = FALSE; |
153 | 155 | in_addr.sin_port = htons(dest_inet_port); |
@@ -196,6 +198,16 @@ void dvmega_read (void) | ||
196 | 198 | break; |
197 | 199 | |
198 | 200 | case DVMEGA_DSTAR_DATA: |
201 | + if (!memcmp (&rig_buff[12], resync, 3)) dvmega_frame_seq = 0; | |
202 | + if (!send_header_sw) | |
203 | + { | |
204 | + inet_send_buff[16] = dvmega_frame_seq; | |
205 | + dvmega_frame_seq++; | |
206 | + if (dvmega_frame_seq > 20) dvmega_frame_seq = 0; | |
207 | + memcpy (&inet_send_buff[17], &rig_buff[3], 12); | |
208 | + dstar_alt_header (inet_send_buff, FALSE); | |
209 | + break; | |
210 | + } | |
199 | 211 | #ifdef _DEBUG_DVMEGA |
200 | 212 | syslog (LOG_DEBUG, "data %2.2x %d %2.2x %2.2x %2.2x %2.2x", |
201 | 213 | rig_buff[0], rig_buff[1], rig_buff[2], rig_buff[3], rig_buff[4], rig_buff[5]); |
@@ -250,7 +262,6 @@ void dvmega_read (void) | ||
250 | 262 | in_addr.sin_addr.s_addr = inet_addr(dest_address); |
251 | 263 | sendto (in_addr_sock, inet_send_buff, 29, MSG_DONTWAIT, |
252 | 264 | (struct sockaddr *)&in_addr, sizeof(in_addr)); |
253 | - dstar_data (inet_send_buff, FALSE); | |
254 | 265 | } |
255 | 266 | m_seq++; |
256 | 267 | m_seq &= 0xffff; |
@@ -260,6 +271,7 @@ void dvmega_read (void) | ||
260 | 271 | #ifdef _DEBUG_DVMEGA |
261 | 272 | syslog (LOG_DEBUG, "EOT"); |
262 | 273 | #endif |
274 | + send_header_sw = FALSE; | |
263 | 275 | if (!dvmega_last_frame_sw) |
264 | 276 | { |
265 | 277 | if (send_sw) |
@@ -7,6 +7,7 @@ void inet_led_onoff (void); | ||
7 | 7 | int inet_send_buff_set (void); |
8 | 8 | void short_msg_wrt (void); |
9 | 9 | void dstar_data (unsigned char string[], int inet); |
10 | +void dstar_alt_header (unsigned char string[], int inet); | |
10 | 11 | unsigned short int crc_calc (char str[], int length); |
11 | 12 | int cmd_check (unsigned char cmd[]); |
12 | 13 | int rig_status_check(void); |
@@ -112,6 +113,7 @@ void header_read_from_node(void) /* read from rig (DV packet) */ | ||
112 | 113 | m_seq++; |
113 | 114 | m_seq &= 0xffff; |
114 | 115 | HeaderLength = 41; |
116 | + send_header_sw = TRUE; | |
115 | 117 | voice_pnt = 12; |
116 | 118 | seq = 0; |
117 | 119 | } |
@@ -144,7 +146,6 @@ int voice_read_from_node() | ||
144 | 146 | ret = usb_control_msg(udev, 0xC0, GET_DATA, 0, 0, usb.buffer, read_len, 200); |
145 | 147 | if (ret > 0) |
146 | 148 | { |
147 | - //gettimeofday(&Node_InTime, NULL); | |
148 | 149 | for (i = 0 ; i < ret; i++) |
149 | 150 | { |
150 | 151 | node_voice_save[voice_pnt] = usb.buffer[i]; |
@@ -169,7 +170,7 @@ int voice_read_from_node() | ||
169 | 170 | seq++; |
170 | 171 | if (seq > 20) seq = 0; |
171 | 172 | memcpy (&inet_send_buff[17], node_voice_save, 12); |
172 | - if (send_sw && !rig_send_sw && node_voice_send_sw) | |
173 | + if (send_sw && !rig_send_sw && send_header_sw) | |
173 | 174 | { |
174 | 175 | in_addr.sin_port = htons(dest_inet_port); |
175 | 176 | in_addr.sin_addr.s_addr = inet_addr(dest_address); |
@@ -177,6 +178,9 @@ int voice_read_from_node() | ||
177 | 178 | (struct sockaddr *)&in_addr, sizeof(in_addr)); |
178 | 179 | dstar_data (inet_send_buff, FALSE); |
179 | 180 | } |
181 | + else | |
182 | + dstar_alt_header (inet_send_buff, FALSE); | |
183 | + | |
180 | 184 | m_seq++; |
181 | 185 | m_seq &= 0xffff; |
182 | 186 | } |
@@ -198,6 +202,7 @@ int voice_read_from_node() | ||
198 | 202 | memset (inet_frame_id, 0x00, 2); |
199 | 203 | frameID = 0; |
200 | 204 | HeaderLength = 0; |
205 | + send_header_sw = FALSE; | |
201 | 206 | node_voice_send_sw = FALSE; |
202 | 207 | digitalWrite (RIG_LED, 0); |
203 | 208 | digitalWrite (INET_LED, 0); |
@@ -9,9 +9,9 @@ void jitter_put (unsigned char str[]); | ||
9 | 9 | void rig_send_check(void); |
10 | 10 | void called_msg (char call1[], char call2[]); |
11 | 11 | void dstar_data (unsigned char string[], int inet); |
12 | +void dstar_alt_header (unsigned char string[], int inet); | |
12 | 13 | void short_msg_wrt (void); |
13 | - | |
14 | -//unsigned char recvBuff[256]; | |
14 | +void jitter_buff_init (void); | |
15 | 15 | |
16 | 16 | char dummy_frame_1[12] = { |
17 | 17 | 0x73, 0x44, 0x1a, 0x72, 0x31, 0x3c, 0xa7, 0x53, 0x02, 0x55, 0x55, 0x55}; |
@@ -40,6 +40,7 @@ void rig_fifo_check (void) | ||
40 | 40 | |
41 | 41 | void dummy_last_frame (void) |
42 | 42 | { |
43 | + if (rig_last_frame_send) return; | |
43 | 44 | recvBuff[16] = jitter_rd_pnt; |
44 | 45 | memcpy (&recvBuff[17], dummy_frame_1, 12); |
45 | 46 | jitter_put (&recvBuff[16]); |
@@ -61,7 +62,7 @@ void dummy_last_frame (void) | ||
61 | 62 | digitalWrite (RIG_LED, 0); |
62 | 63 | rig_last_frame_send = TRUE; |
63 | 64 | drop_rate_print(); |
64 | - dvap_send_header_sw = FALSE; | |
65 | + send_header_sw = FALSE; | |
65 | 66 | } |
66 | 67 | |
67 | 68 | void inet_read (void) |
@@ -180,6 +181,7 @@ void inet_read (void) | ||
180 | 181 | || ((recvBuff[7] & GW) && !memcmp (area_call, &recvBuff[20], 8))) |
181 | 182 | { |
182 | 183 | memcpy (inet_frame_id, &recvBuff[14], 2); |
184 | + memcpy (inet_frame_id_save, &recvBuff[14], 2); | |
183 | 185 | send_buff[0] = 0x29; |
184 | 186 | send_buff[1] = 0x20, |
185 | 187 | memcpy (&send_buff[2], &recvBuff[17], 39); |
@@ -194,6 +196,7 @@ void inet_read (void) | ||
194 | 196 | jitter_max = 0; |
195 | 197 | jitter_min = 500000; |
196 | 198 | jitter_ave = 0; |
199 | + jitter_buff_init(); | |
197 | 200 | #ifdef _SPECIFICATION_CHECK |
198 | 201 | memset (voice_packet_save, 0xff, 15); |
199 | 202 | #endif |
@@ -201,8 +204,8 @@ void inet_read (void) | ||
201 | 204 | memcpy (used_call, &recvBuff[44], 8); |
202 | 205 | memcpy (used_call2, &recvBuff[52], 4); |
203 | 206 | short_msg_wrt(); |
204 | - send_msg_sw = FALSE; | |
205 | 207 | beep_sw = OFF; |
208 | + send_header_sw = TRUE; | |
206 | 209 | } |
207 | 210 | if (!scan_sw) |
208 | 211 | { |
@@ -218,11 +221,13 @@ void inet_read (void) | ||
218 | 221 | } |
219 | 222 | else if (length == 29) |
220 | 223 | { |
221 | - if (!memcmp (&inet_frame_id, &recvBuff[14], 2)) | |
224 | + if (send_header_sw && !memcmp (&inet_frame_id, &recvBuff[14], 2) && (inet_frame_id[0] != 0x00) && (inet_frame_id[1] != 0x00)) | |
222 | 225 | { |
226 | +//syslog (LOG_DEBUG, "pkt seq:%2.2x %2.2x", recvBuff[16], recvBuff[17]); | |
223 | 227 | #ifdef _SPECIFICATIO_CHECK |
224 | 228 | if (!memcmp (&recvBuff[14], voice_packet_save, 15)) |
225 | - syslog (LOG_INFO, "Dup. packet (maybe loop) from %2.2x %2.2x %2.2x", recvBuff[14], recvBuff[15], recvBuff[16]); | |
229 | + syslog (LOG_INFO, "Dup. packet (maybe loop) from %2.2x %2.2x %2.2x", | |
230 | + recvBuff[14], recvBuff[15], recvBuff[16]); | |
226 | 231 | memcpy (voice_packet_save, &recvBuff[14], 15); |
227 | 232 | #endif |
228 | 233 | #ifdef _DEBUG |
@@ -233,11 +238,14 @@ void inet_read (void) | ||
233 | 238 | if (recvBuff[16] & 0x40) |
234 | 239 | { |
235 | 240 | memcpy (&recvBuff[17], dummy_frame_3, 12); |
241 | + jitter_put (&recvBuff[16]); | |
236 | 242 | memset (inet_frame_id, 0x00, 2); |
243 | + memset (inet_frame_id_save, 0x00, 2); | |
237 | 244 | digitalWrite (INET_LED, 0); |
238 | 245 | digitalWrite (RIG_LED, 0); |
239 | 246 | rig_last_frame_send = TRUE; |
240 | 247 | drop_rate_print(); |
248 | + send_header_sw = FALSE; | |
241 | 249 | rig_send_check(); |
242 | 250 | } |
243 | 251 | inet_recv_time_save.tv_sec = inet_recv_time.tv_sec; |
@@ -253,10 +261,10 @@ void inet_read (void) | ||
253 | 261 | syslog (LOG_INFO, "insert dummy_last_frame"); |
254 | 262 | dummy_last_frame(); |
255 | 263 | } |
256 | - #ifdef _SPECIFICATION_CHECK | |
264 | + //#ifdef _SPECIFICATION_CHECK | |
257 | 265 | if (t_sub > 300) syslog (LOG_INFO, "long interval %ld.%03ld Sec. seq:%2.2x", t_sub / 1000, t_sub % 1000, recvBuff[16]); |
258 | 266 | //if (t_sub < 2) syslog (LOG_INFO, "short interval %ld mSec.", t_sub); |
259 | - #endif | |
267 | + //#endif | |
260 | 268 | if (!memcmp (&recvBuff[17] , dummy_frame_3, 3) && !memcmp (&recvBuff[26], &dummy_frame_3[9], 3)) |
261 | 269 | { |
262 | 270 | recvBuff[16] |= 0x40; |
@@ -269,14 +277,76 @@ void inet_read (void) | ||
269 | 277 | recvBuff[16], recvBuff[26] ^ 0x70, recvBuff[27] ^ 0x4f, recvBuff[28] ^ 0x93, recvBuff[26] ^ 0x70, recvBuff[27] ^ 0x4f, recvBuff[28] ^ 0x93); |
270 | 278 | #endif |
271 | 279 | } |
272 | - else | |
280 | + else if ((recvBuff[16] == 0) && !send_header_sw && !memcmp (&inet_frame_id_save, &recvBuff[14], 2)) | |
273 | 281 | { |
274 | - dstar_data (recvBuff, TRUE); | |
282 | + if ((inet_frame_id[0] == 0x00) && (inet_frame_id[1] == 0x00)) | |
283 | + { | |
284 | + syslog (LOG_DEBUG, "same frame ID"); | |
285 | + memcpy (inet_frame_id, inet_frame_id_save, 2); | |
286 | + putFifo (42, header_save); | |
287 | + recv_frame_seq = 20; | |
288 | + gettimeofday (&inet_recv_time, NULL); | |
289 | + rig_last_frame_send = FALSE; | |
290 | + inet_read_cnt = 0; | |
291 | + inet_read_drop_cnt = 0; | |
292 | + jitter_max = 0; | |
293 | + jitter_min = 500000; | |
294 | + jitter_ave = 0; | |
295 | + jitter_buff_init(); | |
296 | + #ifdef _SPECIFICATION_CHECK | |
297 | + memset (voice_packet_save, 0xff, 15); | |
298 | + #endif | |
299 | + memset (short_msg, 0x20, 20); | |
300 | + short_msg_wrt(); | |
301 | + send_msg_sw = FALSE; | |
302 | + beep_sw = OFF; | |
303 | + send_header_sw = TRUE; | |
304 | + inet_read_cnt++; | |
305 | + if (recvBuff[16] == 0x00) inet_led_onoff(); | |
306 | + if (recvBuff[16] & 0x40) | |
307 | + { | |
308 | + memcpy (&recvBuff[17], dummy_frame_3, 12); | |
309 | + memset (inet_frame_id, 0x00, 2); | |
310 | + memset (inet_frame_id_save, 0x00, 2); | |
311 | + digitalWrite (INET_LED, 0); | |
312 | + digitalWrite (RIG_LED, 0); | |
313 | + rig_last_frame_send = TRUE; | |
314 | + drop_rate_print(); | |
315 | + send_header_sw = FALSE; | |
316 | + rig_send_check(); | |
317 | + } | |
318 | + inet_recv_time_save.tv_sec = inet_recv_time.tv_sec; | |
319 | + inet_recv_time_save.tv_usec = inet_recv_time.tv_usec; | |
320 | + gettimeofday (&inet_recv_time, NULL); | |
321 | + timersub (&inet_recv_time, &inet_recv_time_save, &time_sub); | |
322 | + t_sub = time_sub.tv_sec * 1000 + time_sub.tv_usec / 1000; | |
323 | + if (t_sub > jitter_max) jitter_max = t_sub; | |
324 | + if (t_sub & (t_sub < jitter_min)) jitter_min = t_sub; | |
325 | + jitter_ave += (t_sub - 20); | |
326 | + if (timercmp (&time_sub, &inet_recv_timeout, >) && !(recvBuff[16] & 0x40)) | |
327 | + { | |
328 | + syslog (LOG_INFO, "insert dummy_last_frame"); | |
329 | + dummy_last_frame(); | |
330 | + } | |
331 | + //#ifdef _SPECIFICATION_CHECK | |
332 | + if (t_sub > 300) syslog (LOG_INFO, "long interval %ld.%03ld Sec. seq:%2.2x", t_sub / 1000, t_sub % 1000, recvBuff[16]); | |
333 | + //if (t_sub < 2) syslog (LOG_INFO, "short interval %ld mSec.", t_sub); | |
334 | + //#endif | |
335 | + if (!memcmp (&recvBuff[17] , dummy_frame_3, 3) && !memcmp (&recvBuff[26], &dummy_frame_3[9], 3)) | |
336 | + { | |
337 | + recvBuff[16] |= 0x40; | |
338 | + memset (inet_frame_id, 0x00, 2); | |
339 | + } | |
340 | + jitter_put (&recvBuff[16]); | |
341 | + if (!scan_sw) dstar_data (recvBuff, TRUE); | |
342 | + } | |
275 | 343 | } |
344 | + dstar_alt_header (recvBuff, TRUE); | |
276 | 345 | } |
277 | 346 | else if (length == 32) |
278 | 347 | { |
279 | - if (!memcmp (inet_frame_id, &recvBuff[14], 2)) | |
348 | + if (send_header_sw && !memcmp (&inet_frame_id, &recvBuff[14], 2) && (inet_frame_id[0] != 0x00) && (inet_frame_id[1] != 0x00)) | |
349 | + //if ((recvBuff[16] == 0) && !send_header_sw && !memcmp (&inet_frame_id_save, &recvBuff[14], 2)) | |
280 | 350 | { |
281 | 351 | #ifdef _SPECIFICATION_CHECK |
282 | 352 | syslog (LOG_INFO, "Packet length wrong (32 bytes) from %8.8s", &header_save[29]); |
@@ -315,6 +385,7 @@ void inet_read (void) | ||
315 | 385 | recvBuff[16] |= 0x40; |
316 | 386 | memcpy (&recvBuff[17], dummy_frame_3, 12); |
317 | 387 | memset (inet_frame_id, 0x00, 2); |
388 | + memset (inet_frame_id_save, 0x00, 2); | |
318 | 389 | inet_recv_time_save.tv_sec = inet_recv_time.tv_sec; |
319 | 390 | inet_recv_time_save.tv_usec = inet_recv_time.tv_usec; |
320 | 391 | gettimeofday (&inet_recv_time, NULL); |
@@ -1,7 +1,7 @@ | ||
1 | 1 | #include "dmonitor.h" |
2 | 2 | |
3 | 3 | void send_keep_alive(void); |
4 | -void send_dest_keep_alive(void); | |
4 | +int send_dest_keep_alive(void); | |
5 | 5 | void inet_read(void); |
6 | 6 | void init(void); |
7 | 7 | void handler (void); |
@@ -13,6 +13,8 @@ int rig_status_check (void); | ||
13 | 13 | int dvap_status_check (void); |
14 | 14 | int dvmega_status_check (void); |
15 | 15 | int node_status_check (void); |
16 | +int rig_read(void); | |
17 | +int node_space_check (int length); | |
16 | 18 | |
17 | 19 | void rig_close (void); |
18 | 20 | void connected_table_clean(void); |
@@ -88,6 +90,7 @@ int main(int argc, char *argv[]) | ||
88 | 90 | beep_sw = OFF; |
89 | 91 | scan_stop_sw = FALSE; |
90 | 92 | lcd_time_save = 0; |
93 | + send_header_sw = FALSE; | |
91 | 94 | |
92 | 95 | openlog ("dmonitor", LOG_CONS | LOG_PID, LOG_LOCAL0); |
93 | 96 |
@@ -291,7 +294,6 @@ int main(int argc, char *argv[]) | ||
291 | 294 | if (rig_type == DVAP) dvap_conf(); |
292 | 295 | else if (rig_type == DVMEGA) dvmega_conf(); |
293 | 296 | else if (rig_type == NODE) node_conf(); |
294 | - dvap_send_header_sw = FALSE; | |
295 | 297 | dvap_first_voice_pkt = FALSE; |
296 | 298 | |
297 | 299 | for (k = 0 ; k < 2 ; k++) |
@@ -360,7 +362,7 @@ top: | ||
360 | 362 | else if (rig_type == DVMEGA) dvmega_read(); |
361 | 363 | } |
362 | 364 | } |
363 | - jitter_putFifo(); | |
365 | + if (Fifo_cnt) jitter_putFifo(); | |
364 | 366 | rig (); |
365 | 367 | if ((cur_time - hole_punch_send_time) >= hole_punch_send_interval) |
366 | 368 | { |
@@ -375,7 +377,7 @@ top: | ||
375 | 377 | time (&msg_send_set_time); |
376 | 378 | syslog (LOG_INFO, |
377 | 379 | "Not Connected to %8.8s", area_call); |
378 | - error_msg ("ERROR接続できまません"); | |
380 | + error_msg ("ERROR接続できません"); | |
379 | 381 | |
380 | 382 | sleep (15); |
381 | 383 | break; |
@@ -396,26 +398,42 @@ top: | ||
396 | 398 | send_keep_alive(); |
397 | 399 | } |
398 | 400 | } |
401 | +syslog (LOG_DEBUG, "Fifo_cnt %d", Fifo_cnt); | |
399 | 402 | if(rig_send_sw) |
400 | 403 | { |
401 | - gettimeofday (&c_time, NULL); | |
402 | - timeradd (&rig_send_time, &rig_send_time_20mSec, &temp_time); | |
403 | - if (timercmp (&c_time, &temp_time, >)) | |
404 | + if (rig_type == NODE) | |
404 | 405 | { |
405 | - if (send_rig()) | |
406 | + if (node_space_check (15)) | |
406 | 407 | { |
407 | - rig_send_time.tv_sec = temp_time.tv_sec; | |
408 | - rig_send_time.tv_usec = temp_time.tv_usec; | |
408 | + if (!send_rig()) | |
409 | + { | |
410 | + syslog (LOG_INFO, "Empty of the jitter buffer"); | |
411 | + LastFrameSend(); | |
412 | + } | |
409 | 413 | } |
410 | - else | |
414 | + } | |
415 | + else | |
416 | + { | |
417 | + gettimeofday (&c_time, NULL); | |
418 | + timeradd (&rig_send_time, &rig_send_time_20mSec, &temp_time); | |
419 | + if (timercmp (&c_time, &temp_time, >)) | |
411 | 420 | { |
412 | - syslog (LOG_INFO, "Empty of the jitter buffer"); | |
413 | - LastFrameSend(); | |
421 | + if (send_rig()) | |
422 | + { | |
423 | + rig_send_time.tv_sec = temp_time.tv_sec; | |
424 | + rig_send_time.tv_usec = temp_time.tv_usec; | |
425 | + } | |
426 | + else | |
427 | + { | |
428 | + syslog (LOG_INFO, "Empty of the jitter buffer"); | |
429 | + LastFrameSend(); | |
430 | + } | |
414 | 431 | } |
415 | 432 | } |
416 | 433 | } |
417 | 434 | if ((inet_frame_id[0] != 0xff) || (inet_frame_id[1] != 0xff)) |
418 | 435 | { |
436 | +//syslog (LOG_DEBUG, "%2.2x %2.2x", inet_frame_id[0], inet_frame_id[1]); | |
419 | 437 | if ((inet_frame_id[0] != 0x00) || (inet_frame_id[1] != 0x00)) |
420 | 438 | { |
421 | 439 | gettimeofday (&c_time, NULL); |
@@ -424,10 +442,11 @@ top: | ||
424 | 442 | { |
425 | 443 | syslog (LOG_INFO, "insert dummy_last_frame"); |
426 | 444 | dummy_last_frame(); |
427 | - #ifdef _SPECIFICATION_CHECK | |
445 | + //#ifdef _SPECIFICATION_CHECK | |
428 | 446 | timersub (&c_time, &inet_recv_time, &temp_time); |
429 | 447 | syslog (LOG_INFO, "long interval %ld.%03ld Sec.", temp_time.tv_sec, temp_time.tv_usec/1000); |
430 | - #endif | |
448 | + //#endif | |
449 | + gettimeofday (&inet_recv_time, NULL); | |
431 | 450 | } |
432 | 451 | } |
433 | 452 | } |
@@ -454,14 +473,14 @@ skip: | ||
454 | 473 | beep_sw = OFF; |
455 | 474 | } |
456 | 475 | #endif |
457 | - if (send_msg_sw && (!scan_sw || scan_stop_sw)) | |
476 | + if (send_msg_sw && (!scan_sw || scan_stop_sw)) /* send replay message for cmd */ | |
458 | 477 | { |
459 | 478 | if (((rig_type == ICOM) && rig_status_check()) |
460 | 479 | || ((rig_type == DVAP) && dvap_status_check()) |
461 | 480 | || ((rig_type == DVMEGA) && dvmega_status_check()) |
462 | 481 | || ((rig_type == NODE) && node_status_check())) |
463 | 482 | { |
464 | - if (frameID == 0) | |
483 | + if ((frameID == 0) && (inet_frame_id[0] == 0x00) && (inet_frame_id[1] == 0x00)) | |
465 | 484 | { |
466 | 485 | send_msg(msg_temp, mycall2); |
467 | 486 | if (reboot_sw) |
@@ -23,6 +23,7 @@ void dvap_write (int fd, unsigned char buff[], int length); | ||
23 | 23 | void dvmega_write (int fd, unsigned char buff[], int length); |
24 | 24 | void node_write (unsigned char buff[], int length); |
25 | 25 | void dstar_data (unsigned char string[], int inet); |
26 | +void dstar_alt_header (unsigned char string[], int inet); | |
26 | 27 | void short_msg_wrt (void); |
27 | 28 | void rig_not_connect_msg (void); |
28 | 29 | int dvmega_init (void); |
@@ -271,6 +272,7 @@ void rig(void) | ||
271 | 272 | break; |
272 | 273 | |
273 | 274 | case NODE_INIT_DONE: |
275 | + gettimeofday (&inet_recv_time, NULL); | |
274 | 276 | rig_state = HOLE_PUNCH_WAIT;; |
275 | 277 | break; |
276 | 278 |
@@ -429,6 +431,7 @@ int rig_read (void) | ||
429 | 431 | if (memcmp (&inet_send_buff[36], "CQCQCQ ", 8)) gw_on = TRUE; |
430 | 432 | if (send_sw && !rig_send_sw) |
431 | 433 | { |
434 | + send_header_sw = TRUE; | |
432 | 435 | memset (inet_frame_id, 0xff, 2); |
433 | 436 | in_addr.sin_port = htons(dest_inet_port); |
434 | 437 | in_addr.sin_addr.s_addr = inet_addr(dest_address); |
@@ -489,7 +492,7 @@ int rig_read (void) | ||
489 | 492 | } |
490 | 493 | if (rig_buff[3] & 0x40) memset (&rig_buff[13], 0x55, 3); |
491 | 494 | memcpy (&inet_send_buff[16], &rig_buff[3], 13); |
492 | - if (send_sw) | |
495 | + if (send_sw && send_header_sw) | |
493 | 496 | { |
494 | 497 | in_addr.sin_port = htons(dest_inet_port); |
495 | 498 | in_addr.sin_addr.s_addr = inet_addr(dest_address); |
@@ -497,10 +500,13 @@ int rig_read (void) | ||
497 | 500 | (struct sockaddr *)&in_addr, sizeof(in_addr)); |
498 | 501 | dstar_data (inet_send_buff, FALSE); |
499 | 502 | } |
503 | + else | |
504 | + dstar_alt_header (inet_send_buff, FALSE); | |
500 | 505 | if (rig_buff[3] & 0x40) |
501 | 506 | { |
502 | 507 | memset (inet_frame_id, 0x00, 2); |
503 | 508 | frameID = 0; |
509 | + send_header_sw = FALSE; | |
504 | 510 | digitalWrite (RIG_LED, 0); |
505 | 511 | digitalWrite (INET_LED, 0); |
506 | 512 | } |
@@ -572,7 +578,6 @@ void rig_write (int length, unsigned char buff[]) | ||
572 | 578 | } |
573 | 579 | else if (rig_type == NODE) |
574 | 580 | { |
575 | - | |
576 | 581 | node_write (buff, length); |
577 | 582 | } |
578 | 583 |
@@ -145,7 +145,7 @@ unsigned char MD5_dmonitor[32]; | ||
145 | 145 | |
146 | 146 | char rig_type; |
147 | 147 | |
148 | -int dvap_send_header_sw; | |
148 | +//int send_header_sw; | |
149 | 149 | char dvap_first_voice_pkt; |
150 | 150 | |
151 | 151 | time_t dest_keep_alive_send_time; |
@@ -563,60 +563,51 @@ void dvap_write (int fd, unsigned char buff[], int length) | ||
563 | 563 | |
564 | 564 | if (length == 42) |
565 | 565 | { |
566 | - if (!dvap_send_header_sw) | |
567 | - { | |
568 | - time(&dvap_keep_alive); | |
569 | - dvap_send_pkt[0] = 0x2f; | |
570 | - dvap_send_pkt[1] = 0xa0; | |
571 | - tmp = rand() & 0xffff; | |
572 | - memcpy (&dvap_send_pkt[2], &tmp, 2); | |
573 | - dvap_send_pkt[4] = 0x80; | |
574 | - dvap_send_pkt[5] = 0x00; | |
575 | - memcpy (&dvap_send_pkt[6], &buff[2], 41); | |
576 | - dvap_send_pkt[6] &= 0x07; | |
577 | - ret = write (fd, dvap_send_pkt, 47); | |
578 | - dvap_send_pkt[4] = 0x00; | |
579 | - dvap_send_pkt[5]++; | |
580 | - dvap_send_header_sw = TRUE; | |
581 | - dvap_first_voice_pkt = TRUE; | |
582 | - syslog (LOG_DEBUG, "to DVAP rpt2:%8.8s rpt1:%8.8s ur:%8.8s my:%8.8s my2:%4.4s", &buff[5], &buff[13],&buff[21], &buff[29], &buff[37]); | |
583 | -#if 0 | |
584 | -syslog (LOG_DEBUG, "%2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x", | |
566 | + time(&dvap_keep_alive); | |
567 | + dvap_send_pkt[0] = 0x2f; | |
568 | + dvap_send_pkt[1] = 0xa0; | |
569 | + tmp = rand() & 0xffff; | |
570 | + memcpy (&dvap_send_pkt[2], &tmp, 2); | |
571 | + dvap_send_pkt[4] = 0x80; | |
572 | + dvap_send_pkt[5] = 0x00; | |
573 | + memcpy (&dvap_send_pkt[6], &buff[2], 41); | |
574 | + dvap_send_pkt[6] &= 0x07; | |
575 | + ret = write (fd, dvap_send_pkt, 47); | |
576 | + dvap_send_pkt[4] = 0x00; | |
577 | + dvap_send_pkt[5]++; | |
578 | + dvap_first_voice_pkt = TRUE; | |
579 | + syslog (LOG_DEBUG, "to DVAP rpt2:%8.8s rpt1:%8.8s ur:%8.8s my:%8.8s my2:%4.4s", &buff[5], &buff[13],&buff[21], &buff[29], &buff[37]); | |
580 | +#if 0 | |
581 | +sysog (LOG_DEBUG, "%2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x", | |
585 | 582 | dvap_send_pkt[0],dvap_send_pkt[1],dvap_send_pkt[2],dvap_send_pkt[3], dvap_send_pkt[4],dvap_send_pkt[5],dvap_send_pkt[6], dvap_send_pkt[7],dvap_send_pkt[8],dvap_send_pkt[9], dvap_send_pkt[10],dvap_send_pkt[11],dvap_send_pkt[12], dvap_send_pkt[13],dvap_send_pkt[14],dvap_send_pkt[15]); |
586 | 583 | syslog (LOG_DEBUG, "%2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x", |
587 | 584 | dvap_send_pkt[16],dvap_send_pkt[17],dvap_send_pkt[18],dvap_send_pkt[19], dvap_send_pkt[20],dvap_send_pkt[21],dvap_send_pkt[22], dvap_send_pkt[23],dvap_send_pkt[24],dvap_send_pkt[25], dvap_send_pkt[26],dvap_send_pkt[27],dvap_send_pkt[28], dvap_send_pkt[29],dvap_send_pkt[30],dvap_send_pkt[31]); |
588 | 585 | syslog (LOG_DEBUG, "%2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x", |
589 | 586 | dvap_send_pkt[32],dvap_send_pkt[33],dvap_send_pkt[34],dvap_send_pkt[35], dvap_send_pkt[36],dvap_send_pkt[37],dvap_send_pkt[38], dvap_send_pkt[39],dvap_send_pkt[40],dvap_send_pkt[41], dvap_send_pkt[42],dvap_send_pkt[43],dvap_send_pkt[44], dvap_send_pkt[45],dvap_send_pkt[46],dvap_send_pkt[47]); |
590 | 587 | #endif |
591 | - } | |
592 | 588 | } |
593 | 589 | else if (length == 17) |
594 | 590 | { |
595 | - if (dvap_send_header_sw) | |
596 | - { | |
597 | - | |
598 | - if (!dvap_first_voice_pkt || !memcmp (&buff[13], resync , 3)) | |
599 | - { | |
600 | - time(&dvap_keep_alive); | |
601 | - dvap_send_pkt[0] = 0x12; | |
602 | - dvap_send_pkt[1] = 0xc0; | |
603 | - memcpy (&dvap_send_pkt[6], &buff[4], 12); | |
604 | - if ((dvap_send_pkt[4] & 0x40) || | |
605 | - (!memcmp (&dvap_send_pkt[6], &lastframe[3], 3) && !memcmp (&dvap_send_pkt[15], lastframe, 3))) | |
606 | - { | |
607 | - dvap_send_pkt[4] |= 0x40; | |
608 | - dvap_send_header_sw = FALSE; | |
609 | - } | |
610 | - ret = write (fd, dvap_send_pkt, 18); | |
611 | - dvap_send_pkt[5]++; | |
612 | - dvap_send_pkt[4]++; | |
613 | - if (dvap_send_pkt[4] == 21) dvap_send_pkt[4] = 0; | |
614 | - dvap_first_voice_pkt = FALSE; | |
591 | + if (!dvap_first_voice_pkt || !memcmp (&buff[13], resync , 3)) | |
592 | + { | |
593 | + time(&dvap_keep_alive); | |
594 | + dvap_send_pkt[0] = 0x12; | |
595 | + dvap_send_pkt[1] = 0xc0; | |
596 | + memcpy (&dvap_send_pkt[6], &buff[4], 12); | |
597 | + if ((dvap_send_pkt[4] & 0x40) || | |
598 | + (!memcmp (&dvap_send_pkt[6], &lastframe[3], 3) && !memcmp (&dvap_send_pkt[15], lastframe, 3))) | |
599 | + { | |
600 | + dvap_send_pkt[4] |= 0x40; | |
601 | + } | |
602 | + ret = write (fd, dvap_send_pkt, 18); | |
603 | + dvap_send_pkt[5]++; | |
604 | + dvap_send_pkt[4]++; | |
605 | + if (dvap_send_pkt[4] == 21) dvap_send_pkt[4] = 0; | |
606 | + dvap_first_voice_pkt = FALSE; | |
615 | 607 | #if 0 |
616 | 608 | syslog (LOG_DEBUG, "%2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x", |
617 | 609 | dvap_send_pkt[0], dvap_send_pkt[1], dvap_send_pkt[2], dvap_send_pkt[3], dvap_send_pkt[4], dvap_send_pkt[5], dvap_send_pkt[6], dvap_send_pkt[7], dvap_send_pkt[8], dvap_send_pkt[9], dvap_send_pkt[10], dvap_send_pkt[11], dvap_send_pkt[12], dvap_send_pkt[13], dvap_send_pkt[14], dvap_send_pkt[15], dvap_send_pkt[16], dvap_send_pkt[17]); |
618 | 610 | #endif |
619 | - } | |
620 | 611 | } |
621 | 612 | } |
622 | 613 | else |
@@ -5,55 +5,65 @@ void rig_send_check (void); | ||
5 | 5 | int send_rig(void); |
6 | 6 | void rig_write (int length, char str[]); |
7 | 7 | |
8 | -unsigned char status_msg[13][17] = | |
8 | +unsigned char status_msg[21][13] = | |
9 | 9 | { |
10 | - 0x10, 0x22, 0x00, 0x00, 0x9e, 0x8d, 0x32, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x55, 0x2d, 0x16, 0xff, | |
11 | - 0x10, 0x22, 0x01, 0x01, 0x9e, 0x8d, 0x32, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x16, 0x29, 0xf5, 0xff, | |
12 | - 0x10, 0x22, 0x02, 0x02, 0x9e, 0x8d, 0x32, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x16, 0x29, 0xf5, 0xff, | |
13 | - 0x10, 0x22, 0x03, 0x03, 0x9e, 0x8d, 0x32, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x16, 0x29, 0xf5, 0xff, | |
14 | - 0x10, 0x22, 0x04, 0x04, 0x9e, 0x8d, 0x32, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x16, 0x29, 0xf5, 0xff, | |
15 | - 0x10, 0x22, 0x05, 0x05, 0x9e, 0x8d, 0x32, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x16, 0x29, 0xf5, 0xff, | |
16 | - 0x10, 0x22, 0x06, 0x06, 0x9e, 0x8d, 0x32, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x16, 0x29, 0xf5, 0xff, | |
17 | - 0x10, 0x22, 0x07, 0x07, 0x9e, 0x8d, 0x32, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x16, 0x29, 0xf5, 0xff, | |
18 | - 0x10, 0x22, 0x08, 0x08, 0x9e, 0x8d, 0x32, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x16, 0x29, 0xf5, 0xff, | |
19 | - 0x10, 0x22, 0x09, 0x09, 0x9e, 0x8d, 0x32, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x16, 0x29, 0xf5, 0xff, | |
20 | - 0x10, 0x22, 0x0a, 0x0a, 0x9e, 0x8d, 0x32, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x16, 0x29, 0xf5, 0xff, | |
21 | - 0x10, 0x22, 0x0b, 0x0b, 0x9e, 0x8d, 0x32, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x55, 0x55, 0x55, 0xff, | |
22 | - 0x10, 0x22, 0x0c, 0x4c, 0x55, 0xc8, 0x7a, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x55, 0x55, 0x55, 0xff}; | |
10 | + 0x00, 0x9e, 0x8d, 0x32, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x55, 0x2d, 0x16, | |
11 | + 0x01, 0x9e, 0x8d, 0x32, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x16, 0x29, 0xf5, | |
12 | + 0x02, 0x9e, 0x8d, 0x32, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x16, 0x29, 0xf5, | |
13 | + 0x03, 0x9e, 0x8d, 0x32, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x16, 0x29, 0xf5, | |
14 | + 0x04, 0x9e, 0x8d, 0x32, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x16, 0x29, 0xf5, | |
15 | + 0x05, 0x9e, 0x8d, 0x32, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x16, 0x29, 0xf5, | |
16 | + 0x06, 0x9e, 0x8d, 0x32, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x16, 0x29, 0xf5, | |
17 | + 0x07, 0x9e, 0x8d, 0x32, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x16, 0x29, 0xf5, | |
18 | + 0x08, 0x9e, 0x8d, 0x32, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x16, 0x29, 0xf5, | |
19 | + 0x09, 0x9e, 0x8d, 0x32, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x16, 0x29, 0xf5, | |
20 | + 0x0a, 0x9e, 0x8d, 0x32, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x16, 0x29, 0xf5, | |
21 | + 0x0b, 0x9e, 0x8d, 0x32, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x16, 0x29, 0xf5, | |
22 | + 0x0c, 0x9e, 0x8d, 0x32, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x16, 0x29, 0xf5, | |
23 | + 0x0d, 0x9e, 0x8d, 0x32, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x16, 0x29, 0xf5, | |
24 | + 0x0e, 0x9e, 0x8d, 0x32, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x16, 0x29, 0xf5, | |
25 | + 0x0f, 0x9e, 0x8d, 0x32, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x16, 0x29, 0xf5, | |
26 | + 0x10, 0x9e, 0x8d, 0x32, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x16, 0x29, 0xf5, | |
27 | + 0x11, 0x9e, 0x8d, 0x32, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x16, 0x29, 0xf5, | |
28 | + 0x12, 0x9e, 0x8d, 0x32, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x16, 0x29, 0xf5, | |
29 | + 0x13, 0x9e, 0x8d, 0x32, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x55, 0x55, 0x55, | |
30 | + 0x54, 0x55, 0xc8, 0x7a, 0x88, 0x26, 0x1a, 0x3f, 0x61, 0xe8, 0x55, 0x55, 0x55}; | |
31 | + | |
23 | 32 | |
24 | -void send_msg (unsigned char string[], unsigned char my2[], unsigned char flag) | |
33 | +void send_msg (unsigned char string[], unsigned char my2[]) | |
25 | 34 | { |
35 | + char hdr_buff[42]; | |
36 | + struct timeval temp_time; | |
26 | 37 | int n; |
27 | - unsigned char hdr_buff[42]; | |
28 | 38 | |
29 | - status_msg[3][13] = 0x70 ^ 0x40; | |
30 | - status_msg[3][14] = 0x4f ^ string[0]; | |
31 | - status_msg[3][15] = 0x93 ^ string[1]; | |
32 | - status_msg[4][13] = 0x70 ^ string[2]; | |
33 | - status_msg[4][14] = 0x4f ^ string[3]; | |
34 | - status_msg[4][15] = 0x93 ^ string[4]; | |
35 | - status_msg[5][13] = 0x70 ^ 0x41; | |
36 | - status_msg[5][14] = 0x4f ^ string[5]; | |
37 | - status_msg[5][15] = 0x93 ^ string[6]; | |
38 | - status_msg[6][13] = 0x70 ^ string[7]; | |
39 | - status_msg[6][14] = 0x4f ^ string[8]; | |
40 | - status_msg[6][15] = 0x93 ^ string[9]; | |
41 | - status_msg[7][13] = 0x70 ^ 0x42; | |
42 | - status_msg[7][14] = 0x4f ^ string[10]; | |
43 | - status_msg[7][15] = 0x93 ^ string[11]; | |
44 | - status_msg[8][13] = 0x70 ^ string[12]; | |
45 | - status_msg[8][14] = 0x4f ^ string[13]; | |
46 | - status_msg[8][15] = 0x93 ^ string[14]; | |
47 | - status_msg[9][13] = 0x70 ^ 0x43; | |
48 | - status_msg[9][14] = 0x4f ^ string[15]; | |
49 | - status_msg[9][15] = 0x93 ^ string[16]; | |
50 | - status_msg[10][13] = 0x70 ^ string[17]; | |
51 | - status_msg[10][14] = 0x4f ^ string[18]; | |
52 | - status_msg[10][15] = 0x93 ^ string[19]; | |
39 | + status_msg[5][10] = 0x70 ^ 0x40; | |
40 | + status_msg[5][11] = 0x4f ^ string[0]; | |
41 | + status_msg[5][12] = 0x93 ^ string[1]; | |
42 | + status_msg[6][10] = 0x70 ^ string[2]; | |
43 | + status_msg[6][11] = 0x4f ^ string[3]; | |
44 | + status_msg[6][12] = 0x93 ^ string[4]; | |
45 | + status_msg[7][10] = 0x70 ^ 0x41; | |
46 | + status_msg[7][11] = 0x4f ^ string[5]; | |
47 | + status_msg[7][12] = 0x93 ^ string[6]; | |
48 | + status_msg[8][10] = 0x70 ^ string[7]; | |
49 | + status_msg[8][11] = 0x4f ^ string[8]; | |
50 | + status_msg[8][12] = 0x93 ^ string[9]; | |
51 | + status_msg[9][10] = 0x70 ^ 0x42; | |
52 | + status_msg[9][11] = 0x4f ^ string[10]; | |
53 | + status_msg[9][12] = 0x93 ^ string[11]; | |
54 | + status_msg[10][10] = 0x70 ^ string[12]; | |
55 | + status_msg[10][11] = 0x4f ^ string[13]; | |
56 | + status_msg[10][12] = 0x93 ^ string[14]; | |
57 | + status_msg[11][10] = 0x70 ^ 0x43; | |
58 | + status_msg[11][11] = 0x4f ^ string[15]; | |
59 | + status_msg[11][12] = 0x93 ^ string[16]; | |
60 | + status_msg[12][10] = 0x70 ^ string[17]; | |
61 | + status_msg[12][11] = 0x4f ^ string[18]; | |
62 | + status_msg[12][12] = 0x93 ^ string[19]; | |
53 | 63 | |
54 | 64 | hdr_buff[0] = 0x29; |
55 | 65 | hdr_buff[1] = 0x20, |
56 | - hdr_buff[2] = flag; | |
66 | + hdr_buff[2] = 0x00; | |
57 | 67 | hdr_buff[3] = 0x00; |
58 | 68 | hdr_buff[4] = 0x00; |
59 | 69 | memcpy (&hdr_buff[5], "DIRECT ", 8); |
@@ -63,15 +73,14 @@ void send_msg (unsigned char string[], unsigned char my2[], unsigned char flag) | ||
63 | 73 | memcpy (&hdr_buff[37], my2, 4); |
64 | 74 | hdr_buff[41] = 0xff; |
65 | 75 | |
66 | - rig_write (42, hdr_buff); | |
76 | + rig_write (42, hdr_buff); | |
67 | 77 | |
68 | - usleep (30000); | |
69 | - for (n = 0 ; n < 13 ; n++) | |
78 | + usleep (300000); | |
79 | + for (n = 0 ; n < 21 ; n++) | |
70 | 80 | { |
71 | - rig_write (17, &status_msg[n][0]); | |
72 | - usleep (20000); | |
81 | + rig_write (17, &status_msg[n][0]); | |
82 | + usleep (20000); | |
73 | 83 | } |
74 | - | |
75 | 84 | send_msg_sw = FALSE; |
76 | 85 | } |
77 | 86 |
@@ -37,36 +37,37 @@ void send_msg (unsigned char string[], unsigned char my2[]) | ||
37 | 37 | int n; |
38 | 38 | time_t ctime; |
39 | 39 | |
40 | +syslog (LOG_DEBUG, "msg_send"); | |
40 | 41 | time (&ctime); |
41 | 42 | if ((ctime - msg_send_set_time) >= 2) |
42 | 43 | { |
43 | 44 | send_msg_sw = FALSE; |
44 | 45 | return; |
45 | 46 | } |
46 | - status_msg[3][10] = 0x70 ^ 0x40; | |
47 | - status_msg[3][11] = 0x4f ^ string[0]; | |
48 | - status_msg[3][12] = 0x93 ^ string[1]; | |
49 | - status_msg[4][10] = 0x70 ^ string[2]; | |
50 | - status_msg[4][11] = 0x4f ^ string[3]; | |
51 | - status_msg[4][12] = 0x93 ^ string[4]; | |
52 | - status_msg[5][10] = 0x70 ^ 0x41; | |
53 | - status_msg[5][11] = 0x4f ^ string[5]; | |
54 | - status_msg[5][12] = 0x93 ^ string[6]; | |
55 | - status_msg[6][10] = 0x70 ^ string[7]; | |
56 | - status_msg[6][11] = 0x4f ^ string[8]; | |
57 | - status_msg[6][12] = 0x93 ^ string[9]; | |
58 | - status_msg[7][10] = 0x70 ^ 0x42; | |
59 | - status_msg[7][11] = 0x4f ^ string[10]; | |
60 | - status_msg[7][12] = 0x93 ^ string[11]; | |
61 | - status_msg[8][10] = 0x70 ^ string[12]; | |
62 | - status_msg[8][11] = 0x4f ^ string[13]; | |
63 | - status_msg[8][12] = 0x93 ^ string[14]; | |
64 | - status_msg[9][10] = 0x70 ^ 0x43; | |
65 | - status_msg[9][11] = 0x4f ^ string[15]; | |
66 | - status_msg[9][12] = 0x93 ^ string[16]; | |
67 | - status_msg[10][10] = 0x70 ^ string[17]; | |
68 | - status_msg[10][11] = 0x4f ^ string[18]; | |
69 | - status_msg[10][12] = 0x93 ^ string[19]; | |
47 | + status_msg[5][10] = 0x70 ^ 0x40; | |
48 | + status_msg[5][11] = 0x4f ^ string[0]; | |
49 | + status_msg[5][12] = 0x93 ^ string[1]; | |
50 | + status_msg[6][10] = 0x70 ^ string[2]; | |
51 | + status_msg[6][11] = 0x4f ^ string[3]; | |
52 | + status_msg[6][12] = 0x93 ^ string[4]; | |
53 | + status_msg[7][10] = 0x70 ^ 0x41; | |
54 | + status_msg[7][11] = 0x4f ^ string[5]; | |
55 | + status_msg[7][12] = 0x93 ^ string[6]; | |
56 | + status_msg[8][10] = 0x70 ^ string[7]; | |
57 | + status_msg[8][11] = 0x4f ^ string[8]; | |
58 | + status_msg[8][12] = 0x93 ^ string[9]; | |
59 | + status_msg[9][10] = 0x70 ^ 0x42; | |
60 | + status_msg[9][11] = 0x4f ^ string[10]; | |
61 | + status_msg[9][12] = 0x93 ^ string[11]; | |
62 | + status_msg[10][10] = 0x70 ^ string[12]; | |
63 | + status_msg[10][11] = 0x4f ^ string[13]; | |
64 | + status_msg[10][12] = 0x93 ^ string[14]; | |
65 | + status_msg[11][10] = 0x70 ^ 0x43; | |
66 | + status_msg[11][11] = 0x4f ^ string[15]; | |
67 | + status_msg[11][12] = 0x93 ^ string[16]; | |
68 | + status_msg[12][10] = 0x70 ^ string[17]; | |
69 | + status_msg[12][11] = 0x4f ^ string[18]; | |
70 | + status_msg[12][12] = 0x93 ^ string[19]; | |
70 | 71 | |
71 | 72 | hdr_buff[0] = 0x29; |
72 | 73 | hdr_buff[1] = 0x20, |
@@ -82,7 +83,6 @@ void send_msg (unsigned char string[], unsigned char my2[]) | ||
82 | 83 | |
83 | 84 | putFifo(42, hdr_buff); |
84 | 85 | |
85 | - usleep (300000); | |
86 | 86 | for (n = 0 ; n < 21 ; n++) |
87 | 87 | { |
88 | 88 | putFifo (13, &status_msg[n][0]); |
@@ -103,7 +103,6 @@ void send_msg (unsigned char string[], unsigned char my2[]) | ||
103 | 103 | break; |
104 | 104 | } |
105 | 105 | } |
106 | - sleep (1); | |
107 | 106 | send_msg_sw = FALSE; |
108 | 107 | } |
109 | 108 |
@@ -27,13 +27,14 @@ void node_header_send (unsigned char header[]) | ||
27 | 27 | header[1] = 0x00; |
28 | 28 | header[2] = 0x00; |
29 | 29 | usb_control_msg(udev, 0x40, SET_FLAGS, 0, 0, header, 3, 100); |
30 | - | |
30 | +#if 0 | |
31 | 31 | usb_control_msg(udev, 0xc0, GET_REMAINSPACE, 0, 0, (char *)&len ,1, 100); |
32 | 32 | while (len < 95) |
33 | 33 | { |
34 | - usleep (100000); | |
34 | + usleep (2000); | |
35 | 35 | usb_control_msg(udev, 0xc0, GET_REMAINSPACE, 0, 0, (char *)&len ,1, 100); |
36 | 36 | } |
37 | +#endif | |
37 | 38 | usb_control_msg(udev, 0x40, SET_PTT, ON, 0, NULL, 0, 100); |
38 | 39 | } |
39 | 40 |
@@ -46,18 +47,22 @@ void node_voice_send (unsigned char voice[]) | ||
46 | 47 | syslog (LOG_DEBUG, "%2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x", |
47 | 48 | voice[0], voice[1], voice[2], voice[3], voice[4], voice[5], voice[6], voice[7], voice[8], voice[9], voice[10], voice[11]); |
48 | 49 | #endif |
50 | +#if 0 | |
49 | 51 | usb_control_msg(udev, 0xc0, GET_REMAINSPACE, 0, 0, (char *)&len ,1, 100); |
50 | 52 | while (len < 12) |
51 | 53 | { |
52 | - usleep (20000); | |
54 | + usleep (2000); | |
53 | 55 | usb_control_msg(udev, 0xc0, GET_REMAINSPACE, 0, 0, (char *)&len ,1, 100); |
54 | 56 | } |
57 | +#endif | |
55 | 58 | ret = usb_control_msg(udev, 0x40, PUT_DATA, 0, 0, voice, 12, 100); |
59 | +#if 0 | |
56 | 60 | while (ret < 0) |
57 | 61 | { |
58 | - usleep (2000); | |
62 | + usleep (200); | |
59 | 63 | ret = usb_control_msg(udev, 0x40, PUT_DATA, 0, 0, voice, 12, 100); |
60 | 64 | } |
65 | +#endif | |
61 | 66 | } |
62 | 67 | |
63 | 68 | void node_last_send (unsigned char voice[]) |
@@ -66,18 +71,22 @@ void node_last_send (unsigned char voice[]) | ||
66 | 71 | unsigned char len; |
67 | 72 | |
68 | 73 | memcpy (&voice[9], lastframe, 6); |
74 | +#if 0 | |
69 | 75 | usb_control_msg(udev, 0xc0, GET_REMAINSPACE, 0, 0, (char *)&len ,1, 100); |
70 | 76 | while (len < 15) |
71 | 77 | { |
72 | - usleep (20000); | |
78 | + usleep (2000); | |
73 | 79 | usb_control_msg(udev, 0xc0, GET_REMAINSPACE, 0, 0, (char *)&len ,1, 100); |
74 | 80 | } |
81 | +#endif | |
75 | 82 | ret = usb_control_msg(udev, 0x40, PUT_DATA, 0, 0, voice, 15, 100); |
83 | +#if 0 | |
76 | 84 | while (ret < 0) |
77 | 85 | { |
78 | - usleep (2000); | |
86 | + usleep (200); | |
79 | 87 | ret = usb_control_msg(udev, 0x40, PUT_DATA, 0, 0, voice, 15, 100); |
80 | 88 | } |
89 | +#endif | |
81 | 90 | /* PTT OFF */ |
82 | 91 | ret = usb_control_msg(udev, 0x40, SET_PTT, OFF, 0, NULL, 0, 100); |
83 | 92 | frameID = 0; |
@@ -91,10 +100,19 @@ void node_write (unsigned char str[], int length) | ||
91 | 100 | } |
92 | 101 | else if (length == 17) |
93 | 102 | { |
94 | -//syslog(LOG_DEBUG," %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x", str[4], str[5], str[6], str[13], str[14], str[15]); | |
95 | 103 | if ((str[3] & 0x40) |
96 | 104 | || !memcmp (&str[13], &lastframe[3], 3) |
97 | 105 | || !memcmp (&str[4], &lastframe[3], 3)) node_last_send (&str[4]); |
98 | 106 | else node_voice_send (&str[4]); |
99 | 107 | } |
100 | 108 | } |
109 | + | |
110 | +int node_space_check (int length) | |
111 | +{ | |
112 | + unsigned char len; | |
113 | + | |
114 | + usb_control_msg(udev, 0xc0, GET_REMAINSPACE, 0, 0, (char *)&len , 1, 100); | |
115 | + if (len < length) return FALSE; | |
116 | + return TRUE; | |
117 | +} | |
118 | + |