first commit
This commit is contained in:
+737
@@ -0,0 +1,737 @@
|
||||
// This file is part of "NPR70 modem firmware" software
|
||||
// (A GMSK data modem for ham radio 430-440MHz, at several hundreds of kbps)
|
||||
// Copyright (c) 2017-2020 Guillaume F. F4HDK (amateur radio callsign)
|
||||
//
|
||||
// "NPR70 modem firmware" is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// "NPR70 modem firmware" is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with "NPR70 modem firmware". If not, see <http://www.gnu.org/licenses/>
|
||||
|
||||
#include "DHCP_ARP.h"
|
||||
#include "mbed.h"
|
||||
#include "global_variables.h"
|
||||
#include "Eth_IPv4.h"
|
||||
#include "W5500.h"
|
||||
#include "HMI_telnet.h"
|
||||
|
||||
// Content : DHCP server (for TDMA clients and point to point config)
|
||||
// ARP proxy for "bridged ethernet" emulation.
|
||||
// ARP resolution (a little bit ugly)
|
||||
|
||||
#define DHCP_ARP_tab_size 32
|
||||
#define DHCP_ARP_timeout 360 /*120*/
|
||||
static unsigned char DHCP_ARP_MAC[DHCP_ARP_tab_size][6];
|
||||
static unsigned long int DHCP_ARP_IP[DHCP_ARP_tab_size];
|
||||
static unsigned char DHCP_ARP_status[DHCP_ARP_tab_size]; // DHCP ARP
|
||||
// 0: Free Free
|
||||
// 1: allocation in progress (unused)
|
||||
// 2: allocated Valid
|
||||
// 3: prefered but not allocated Timeout_1
|
||||
static unsigned int DHCP_ARP_date[DHCP_ARP_tab_size];
|
||||
|
||||
int compare_IP(unsigned char* IP1, unsigned char* IP2) {
|
||||
int result;
|
||||
int i;
|
||||
result = 1;
|
||||
for (i=0; i<4; i++) {
|
||||
if (IP1[i] != IP2[i]) {
|
||||
result = 0;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
int compare_MAC(unsigned char* MAC1, unsigned char* MAC2) {
|
||||
int result;
|
||||
int i;
|
||||
result = 1;
|
||||
for (i=0; i<6; i++) {
|
||||
if (MAC1[i] != MAC2[i]) {
|
||||
result = 0;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// *** DHCP functions ***
|
||||
|
||||
void reset_DHCP_table(LAN_conf_T* LAN_config) {
|
||||
int i;
|
||||
for (i=0; i<DHCP_ARP_tab_size; i++) {
|
||||
DHCP_ARP_status[i] = 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void DHCP_release (LAN_conf_T* LAN_config, unsigned char* client_MAC) {
|
||||
int i;
|
||||
for (i=0; i<DHCP_ARP_tab_size; i++) {
|
||||
if ((compare_MAC( DHCP_ARP_MAC[i], client_MAC)) && (DHCP_ARP_status[i])) {
|
||||
DHCP_ARP_status[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
int lookfor_free_LAN_IP (LAN_conf_T* LAN_config, unsigned char* client_MAC, unsigned char* requested_IP, unsigned char* proposed_IP, int req_type) {
|
||||
//req type : like DHCP. 1:discover 3:request
|
||||
int answer=0;
|
||||
int i_previous_alloc = 255;
|
||||
int match_previous_alloc = 0;
|
||||
int i,j;
|
||||
unsigned long int proposed_IP_int = 0xFFFFFFFF;
|
||||
int new_alloc_entry = 0;
|
||||
unsigned char new_status;
|
||||
//unsigned long int requested_IP_int;
|
||||
unsigned long int req_IP_int;
|
||||
|
||||
req_IP_int = IP_char2int (requested_IP);
|
||||
|
||||
// 1) tests
|
||||
// 1.1) lookfor client MAC in DHCP table
|
||||
for (i=0; i<DHCP_ARP_tab_size; i++) {
|
||||
if ((compare_MAC( DHCP_ARP_MAC[i], client_MAC)) && (DHCP_ARP_status[i])) {
|
||||
i_previous_alloc = i;
|
||||
}
|
||||
//printf("MAC_comparison:%i %i\r\n", compare_MAC( LAN_config->DHCP_alloc_MAC[i], client_MAC), i);
|
||||
}
|
||||
//printf ("previous entry with same MAC: %i\r\n", i_previous_alloc);
|
||||
// 1.2)check if matches previous allocation
|
||||
if (i_previous_alloc!=255) {
|
||||
if (DHCP_ARP_IP[i_previous_alloc] == req_IP_int) {
|
||||
match_previous_alloc = 1;
|
||||
} else {
|
||||
match_previous_alloc = 0;
|
||||
}
|
||||
if (match_previous_alloc==1) {// matches previous allocation
|
||||
// total match with previous allocation
|
||||
answer = 1;
|
||||
if (req_type==1) {
|
||||
DHCP_ARP_status[i_previous_alloc] = 1;
|
||||
}
|
||||
if (req_type==3) {
|
||||
DHCP_ARP_status[i_previous_alloc] = 2;
|
||||
DHCP_ARP_date[i_previous_alloc] = GLOBAL_timer.read_us();
|
||||
}
|
||||
} else {
|
||||
//address requested different from previous allocation
|
||||
|
||||
}
|
||||
//printf ("req matches previous:%i\r\n", match_previous_alloc);
|
||||
|
||||
}
|
||||
// 1.3) check if requested IP agreed : inside range
|
||||
int requ_IP_inside_range;
|
||||
if ( (req_IP_int >= LAN_config->DHCP_range_start) && (req_IP_int < (LAN_config->DHCP_range_start + LAN_config->DHCP_range_size)) ) {
|
||||
requ_IP_inside_range = 1;
|
||||
} else {
|
||||
requ_IP_inside_range = 0;
|
||||
}
|
||||
//printf("requested ip inside range:%i\r\n", requ_IP_inside_range);
|
||||
// 1.4) chech if requested IP is free (not allocated to another MAC)
|
||||
int req_IP_free = 1;
|
||||
for (i=0; i<DHCP_ARP_tab_size; i++) {
|
||||
if ( (DHCP_ARP_IP[i] == req_IP_int) && (DHCP_ARP_status[i]==2) && (i != i_previous_alloc) ) {
|
||||
req_IP_free = 0;
|
||||
}
|
||||
}
|
||||
// 1.5) synthesis
|
||||
int req_IP_agreed;
|
||||
if ( (requ_IP_inside_range == 1) && (req_IP_free == 1) ) {
|
||||
req_IP_agreed = 1;
|
||||
} else {
|
||||
req_IP_agreed = 0;
|
||||
}
|
||||
// 2.1) free previous DHCP entry
|
||||
if ( (i_previous_alloc!=255) && (match_previous_alloc==0) && (req_IP_agreed==1) ) {
|
||||
DHCP_ARP_status[i_previous_alloc] = 0;
|
||||
}
|
||||
// 2.2) look for unallocated IP
|
||||
unsigned long int IP_tested;
|
||||
int OK_loc;
|
||||
int found_IP = 0;
|
||||
if ( (req_type==1) && (req_IP_agreed==0) && (i_previous_alloc==255) ) {
|
||||
for (i = (LAN_config->DHCP_range_size - 1); i>=0; i--) {
|
||||
IP_tested = LAN_config->DHCP_range_start + i;
|
||||
OK_loc=1;
|
||||
for (j=0; j<DHCP_ARP_tab_size; j++) {
|
||||
if ( (IP_tested == DHCP_ARP_IP[j]) && (DHCP_ARP_status[j]==2) ) { // a améliorer : trop simple
|
||||
OK_loc = 0;
|
||||
}
|
||||
}
|
||||
if (OK_loc == 1) {
|
||||
proposed_IP_int = IP_tested;
|
||||
found_IP = 1;
|
||||
}
|
||||
}
|
||||
if (found_IP == 1) {
|
||||
new_alloc_entry = 1;
|
||||
IP_int2char (proposed_IP_int,proposed_IP);
|
||||
new_status = 1;
|
||||
answer = 3;
|
||||
}
|
||||
//printf("case 2 new IP needed \r\n");
|
||||
}
|
||||
|
||||
// 2.3) anwser with previous allocation
|
||||
if ( (req_type == 1) && (req_IP_agreed==0) && (i_previous_alloc!=255) ) {
|
||||
IP_int2char (DHCP_ARP_IP[i_previous_alloc], proposed_IP);
|
||||
if (req_type == 1) { new_status = 1; }
|
||||
if (req_type == 3) {
|
||||
new_status = 2;
|
||||
DHCP_ARP_date[i_previous_alloc] = GLOBAL_timer.read_us();
|
||||
}
|
||||
DHCP_ARP_status [i_previous_alloc] = new_status;
|
||||
answer = 3;
|
||||
//printf("case 3 answer with previous alloc\r\n");
|
||||
}
|
||||
|
||||
// 2.4) new IP agreed, but do match previous allocation
|
||||
if ( (i_previous_alloc!=255) && (match_previous_alloc==0) && (req_IP_agreed==1) ) {
|
||||
for (i=0; i<4; i++) {
|
||||
proposed_IP [i] = requested_IP[i];
|
||||
}
|
||||
new_alloc_entry = 1;
|
||||
if (req_type == 1) { new_status = 1; }
|
||||
if (req_type == 3) { new_status = 2; }
|
||||
answer = 1;
|
||||
//printf("case 4 new IP ok, do not match previous\r\n");
|
||||
}
|
||||
|
||||
// 2.5) new IP agreed and matches previous allocation
|
||||
if ( (i_previous_alloc!=255) && (match_previous_alloc==1) && (req_IP_agreed==1) ) {
|
||||
for (i=0; i<4; i++) {
|
||||
proposed_IP [i] = requested_IP[i];
|
||||
}
|
||||
if (req_type == 1) { new_status = 1; }
|
||||
if (req_type == 3) {
|
||||
new_status = 2;
|
||||
DHCP_ARP_date[i_previous_alloc] = GLOBAL_timer.read_us();
|
||||
}
|
||||
DHCP_ARP_status [i_previous_alloc] = new_status;
|
||||
answer = 1;
|
||||
//printf("case 5 IP requested match previous, and OK\r\n");
|
||||
}
|
||||
|
||||
// 2.6) new IP agreed, no previous allocation
|
||||
if ( (i_previous_alloc==255) && (req_IP_agreed==1) ) {
|
||||
for (i=0; i<4; i++) {
|
||||
proposed_IP [i] = requested_IP[i];
|
||||
}
|
||||
new_alloc_entry = 1;
|
||||
if (req_type == 1) { new_status = 1; }
|
||||
if (req_type == 3) { new_status = 2; }
|
||||
answer = 1;
|
||||
//printf("case 6 IP requested ok, no previous alloc\r\n");
|
||||
}
|
||||
|
||||
// new DHCP entry
|
||||
int free_DHCP_slot=255;
|
||||
if (new_alloc_entry == 1) {
|
||||
for (i=DHCP_ARP_tab_size-1; i>=0; i--) {
|
||||
if (DHCP_ARP_status[i]!=2) {
|
||||
free_DHCP_slot = i;
|
||||
}
|
||||
//printf("dhcp inside lookfor:%i stat:%i\r\n", i, LAN_config->DHCP_alloc_status[i]);
|
||||
}
|
||||
if (free_DHCP_slot!=255) {
|
||||
DHCP_ARP_status[free_DHCP_slot] = new_status;
|
||||
if (new_status == 2) {DHCP_ARP_date[free_DHCP_slot] = GLOBAL_timer.read_us();}
|
||||
DHCP_ARP_IP[free_DHCP_slot] = IP_char2int(proposed_IP);
|
||||
for (i=0; i<6; i++) {
|
||||
DHCP_ARP_MAC[free_DHCP_slot][i] = client_MAC[i];
|
||||
}
|
||||
//printf("new DHCP entry OK, index %i status %i \r\n", free_DHCP_slot, new_status);
|
||||
}
|
||||
}
|
||||
return answer;
|
||||
}
|
||||
|
||||
void DHCP_server(LAN_conf_T* LAN_config, W5500_chip* W5500 ) {
|
||||
static unsigned char RX_data[600];//600
|
||||
unsigned char client_MAC[7];
|
||||
unsigned char session_ID[5];
|
||||
unsigned char requested_IP[5]={0,0,0,0,0};
|
||||
unsigned char DHCP_server_IP[5]={0,0,0,0,0};
|
||||
int RX_size, size_UDP, i;
|
||||
unsigned char message_type_client = 0;
|
||||
unsigned char message_type_server;
|
||||
int index_opt_answer=240;
|
||||
static unsigned char DHCP_answer[400];
|
||||
unsigned char proposed_IP[4];
|
||||
int loc_status;
|
||||
|
||||
|
||||
RX_size = W5500_read_received_size(W5500, 3);
|
||||
if (RX_size>0) {
|
||||
|
||||
size_UDP = W5500_read_UDP_pckt(W5500, 3, RX_data);
|
||||
if (RX_data[8]==1) { // Valid DHCP request
|
||||
|
||||
// *** DHCP request decoding ***
|
||||
// client mac address read
|
||||
for (i=0; i<6; i++) {
|
||||
client_MAC[i] = RX_data[i+36];
|
||||
//printf("%x:", client_MAC[i]);
|
||||
}
|
||||
// session ID (XID)
|
||||
for (i=0; i<4; i++) {
|
||||
session_ID[i] = RX_data[i+12];
|
||||
//printf("%x:", session_ID[i]);
|
||||
}
|
||||
for (i=0; i<4; i++) {
|
||||
requested_IP[i] = RX_data[i+20];
|
||||
}
|
||||
//printf("\r\n");
|
||||
//printf("\r\nDHCP from client RXs:%d UDPs:%d\r\n", RX_size, size_UDP);
|
||||
// DHCP option read
|
||||
int option_pos;
|
||||
unsigned char option_size;
|
||||
unsigned char option_type;
|
||||
option_pos = 248;
|
||||
do {
|
||||
option_type = RX_data[option_pos];
|
||||
option_size = RX_data[option_pos+1];
|
||||
//printf("option:%d\r\n",option_type);
|
||||
|
||||
switch (option_type) {
|
||||
case 53 : message_type_client = RX_data[option_pos+2]; break;
|
||||
case 50 :
|
||||
requested_IP[0] = RX_data[option_pos+2];
|
||||
requested_IP[1] = RX_data[option_pos+3];
|
||||
requested_IP[2] = RX_data[option_pos+4];
|
||||
requested_IP[3] = RX_data[option_pos+5];
|
||||
break;
|
||||
case 54 :
|
||||
DHCP_server_IP[0] = RX_data[option_pos+2];
|
||||
DHCP_server_IP[1] = RX_data[option_pos+3];
|
||||
DHCP_server_IP[2] = RX_data[option_pos+4];
|
||||
DHCP_server_IP[3] = RX_data[option_pos+5];
|
||||
break;
|
||||
}
|
||||
option_pos = option_pos + option_size + 2;
|
||||
} while ((option_type != 255) && (option_pos < size_UDP));
|
||||
|
||||
// independant DHCP answer fields
|
||||
for (i=0; i<400; i++ ) {
|
||||
DHCP_answer[i] = 0;
|
||||
}
|
||||
DHCP_answer[0] = 0x02;//answer
|
||||
DHCP_answer[1] = 0x01;
|
||||
DHCP_answer[2] = 0x06;
|
||||
DHCP_answer[3] = 0x00;
|
||||
for (i=0; i<4; i++) {// session ID
|
||||
DHCP_answer[i+4] = session_ID[i];
|
||||
}
|
||||
for (i=0; i<6; i++) {// client MAC
|
||||
DHCP_answer[i+28] = client_MAC[i];
|
||||
}
|
||||
DHCP_answer[236] = 0x63;//magic cookie
|
||||
DHCP_answer[237] = 0x82;
|
||||
DHCP_answer[238] = 0x53;
|
||||
DHCP_answer[239] = 0x63;
|
||||
|
||||
// decision
|
||||
loc_status = lookfor_free_LAN_IP (LAN_config, client_MAC, requested_IP, proposed_IP, message_type_client);
|
||||
|
||||
if (message_type_client == 1) { // discover -> offer
|
||||
|
||||
for (i=0; i<4; i++) { //proposed IP
|
||||
DHCP_answer[i+16] = proposed_IP[i];
|
||||
}
|
||||
|
||||
message_type_server = 2;
|
||||
DHCP_answer[index_opt_answer]=53; // message type
|
||||
DHCP_answer[index_opt_answer+1]=1;
|
||||
DHCP_answer[index_opt_answer+2]=message_type_server;
|
||||
index_opt_answer = index_opt_answer +3;
|
||||
DHCP_answer[index_opt_answer]=1; // subnet mask
|
||||
DHCP_answer[index_opt_answer+1]=4;
|
||||
IP_int2char (LAN_config->LAN_subnet_mask, (DHCP_answer + index_opt_answer + 2) );
|
||||
index_opt_answer = index_opt_answer +6;
|
||||
if (LAN_config->LAN_def_route_activ == 1) {
|
||||
DHCP_answer[index_opt_answer]=3; // default route
|
||||
DHCP_answer[index_opt_answer+1]=4;
|
||||
|
||||
IP_int2char (LAN_config->LAN_def_route, (DHCP_answer + index_opt_answer + 2) );
|
||||
index_opt_answer = index_opt_answer +6;
|
||||
}
|
||||
if (LAN_config->LAN_DNS_activ == 1) {
|
||||
DHCP_answer[index_opt_answer]=6; // DNS server
|
||||
DHCP_answer[index_opt_answer+1]=4;
|
||||
|
||||
IP_int2char (LAN_config->LAN_DNS_value, (DHCP_answer + index_opt_answer + 2) );
|
||||
index_opt_answer = index_opt_answer +6;
|
||||
}
|
||||
DHCP_answer[index_opt_answer]=51; //Lease Time
|
||||
DHCP_answer[index_opt_answer+1]=4;
|
||||
DHCP_answer[index_opt_answer+2]=0x00;
|
||||
DHCP_answer[index_opt_answer+3]=0x00;//01
|
||||
DHCP_answer[index_opt_answer+4]= (DHCP_ARP_timeout & 0xFF00) >> 8;//0x00
|
||||
//DHCP_answer[index_opt_answer+5]=0x3C;//80
|
||||
DHCP_answer[index_opt_answer+5]= DHCP_ARP_timeout & 0xFF;//DHCP_ARP_timeout
|
||||
index_opt_answer = index_opt_answer +6;
|
||||
DHCP_answer[index_opt_answer]=54; // DHCP server IP
|
||||
DHCP_answer[index_opt_answer+1]=4;
|
||||
IP_int2char (LAN_config->LAN_modem_IP, (DHCP_answer + index_opt_answer + 2) );
|
||||
index_opt_answer = index_opt_answer + 6;
|
||||
//DHCP_answer[index_opt_answer]=26; // Interface MTU
|
||||
//DHCP_answer[index_opt_answer+1]=2;
|
||||
//DHCP_answer[index_opt_answer+2]=0x03;//02
|
||||
//DHCP_answer[index_opt_answer+3]=0xE8;//40
|
||||
//index_opt_answer = index_opt_answer + 4;
|
||||
//DHCP_answer[index_opt_answer]=27; // subnets local
|
||||
//DHCP_answer[index_opt_answer+1]=1;
|
||||
//DHCP_answer[index_opt_answer+2]=0x01;
|
||||
//index_opt_answer = index_opt_answer + 3;
|
||||
DHCP_answer[index_opt_answer]=255;// end
|
||||
index_opt_answer = index_opt_answer + 1;
|
||||
W5500_write_TX_buffer(W5500, 3, DHCP_answer, index_opt_answer, 1);
|
||||
}
|
||||
|
||||
if ( (message_type_client == 3) && (loc_status !=0 ) ) { // request -> ack
|
||||
for (i=0; i<4; i++) { //proposed IP
|
||||
DHCP_answer[i+16] = proposed_IP[i];
|
||||
}
|
||||
|
||||
message_type_server = 5;
|
||||
DHCP_answer[index_opt_answer]=53; // message type
|
||||
DHCP_answer[index_opt_answer+1]=1;
|
||||
DHCP_answer[index_opt_answer+2]=message_type_server;
|
||||
index_opt_answer = index_opt_answer +3;
|
||||
DHCP_answer[index_opt_answer]=1; // subnet mask
|
||||
DHCP_answer[index_opt_answer+1]=4;
|
||||
IP_int2char (LAN_config->LAN_subnet_mask, (DHCP_answer + index_opt_answer + 2) );
|
||||
index_opt_answer = index_opt_answer +6;
|
||||
if (LAN_config->LAN_def_route_activ == 1) {
|
||||
DHCP_answer[index_opt_answer]=3; // default route
|
||||
DHCP_answer[index_opt_answer+1]=4;
|
||||
|
||||
IP_int2char (LAN_config->LAN_def_route, (DHCP_answer + index_opt_answer + 2) );
|
||||
index_opt_answer = index_opt_answer +6;
|
||||
}
|
||||
if (LAN_config->LAN_DNS_activ == 1) {
|
||||
DHCP_answer[index_opt_answer]=6; // DNS server
|
||||
DHCP_answer[index_opt_answer+1]=4;
|
||||
|
||||
IP_int2char (LAN_config->LAN_DNS_value, (DHCP_answer + index_opt_answer + 2) );
|
||||
index_opt_answer = index_opt_answer +6;
|
||||
}
|
||||
DHCP_answer[index_opt_answer]=51; //Lease Time
|
||||
DHCP_answer[index_opt_answer+1]=4;
|
||||
DHCP_answer[index_opt_answer+2]=0x00;
|
||||
DHCP_answer[index_opt_answer+3]=0x00;//01
|
||||
DHCP_answer[index_opt_answer+4]= (DHCP_ARP_timeout & 0xFF00) >> 8;//51
|
||||
DHCP_answer[index_opt_answer+5]= DHCP_ARP_timeout & 0xFF;
|
||||
index_opt_answer = index_opt_answer +6;
|
||||
DHCP_answer[index_opt_answer]=54; // DHCP server IP
|
||||
DHCP_answer[index_opt_answer+1]=4;
|
||||
IP_int2char (LAN_config->LAN_modem_IP, (DHCP_answer + index_opt_answer + 2) );
|
||||
index_opt_answer = index_opt_answer + 6;
|
||||
//DHCP_answer[index_opt_answer]=26; // Interface MTU
|
||||
//DHCP_answer[index_opt_answer+1]=2;
|
||||
//DHCP_answer[index_opt_answer+2]=0x03;//02
|
||||
//DHCP_answer[index_opt_answer+3]=0xE8;//40
|
||||
//index_opt_answer = index_opt_answer + 4;
|
||||
//DHCP_answer[index_opt_answer]=27; // subnets local
|
||||
//DHCP_answer[index_opt_answer+1]=1;
|
||||
//DHCP_answer[index_opt_answer+2]=0x01;
|
||||
//index_opt_answer = index_opt_answer + 3;
|
||||
DHCP_answer[index_opt_answer]=255;// end
|
||||
index_opt_answer = index_opt_answer + 1;
|
||||
W5500_write_TX_buffer(W5500, 3, DHCP_answer, index_opt_answer, 1);
|
||||
}
|
||||
|
||||
if ( (message_type_client == 3) && (loc_status ==0 ) ) { //request -> NAK
|
||||
//printf ("NAK NAK\r\n");
|
||||
message_type_server = 6; // NAK
|
||||
DHCP_answer[index_opt_answer]=53; // message type
|
||||
DHCP_answer[index_opt_answer+1]=1;
|
||||
DHCP_answer[index_opt_answer+2]=message_type_server;
|
||||
index_opt_answer = index_opt_answer +3;
|
||||
DHCP_answer[index_opt_answer]=255;// end
|
||||
index_opt_answer = index_opt_answer + 1;
|
||||
W5500_write_TX_buffer(W5500, 3, DHCP_answer, index_opt_answer, 1);
|
||||
}
|
||||
|
||||
if ( message_type_client == 7 ) { // DHCP RELEASE
|
||||
//printf ("DHCP RELEASE\r\n");
|
||||
DHCP_release (LAN_config, client_MAC);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DHCP_ARP_print_entries(void) {
|
||||
int i;
|
||||
unsigned char loc_IP_char[10];
|
||||
for (i=0; i<DHCP_ARP_tab_size; i++) {
|
||||
if (DHCP_ARP_status[i]!=0) {
|
||||
IP_int2char (DHCP_ARP_IP[i], loc_IP_char);
|
||||
HMI_printf (" %i:stat:%i IP:", i, DHCP_ARP_status[i]);
|
||||
HMI_printf ("%i.%i.%i.%i MAC:", loc_IP_char[0], loc_IP_char[1], loc_IP_char[2], loc_IP_char[3]);
|
||||
HMI_printf("%02X:", DHCP_ARP_MAC[i][0]);
|
||||
HMI_printf("%02X:", DHCP_ARP_MAC[i][1]);
|
||||
HMI_printf("%02X:", DHCP_ARP_MAC[i][2]);
|
||||
HMI_printf("%02X:", DHCP_ARP_MAC[i][3]);
|
||||
HMI_printf("%02X:", DHCP_ARP_MAC[i][4]);
|
||||
HMI_printf("%02X ", DHCP_ARP_MAC[i][5]);
|
||||
HMI_printf("age:%isec\r\n", (GLOBAL_timer.read_us()-DHCP_ARP_date[i])/1000000);
|
||||
}
|
||||
}
|
||||
HMI_printf("\r\nready> ");
|
||||
}
|
||||
|
||||
// *** ARP proxy and ARP resolver ***
|
||||
|
||||
void ARP_proxy (unsigned char* ARP_req_packet, int size) {
|
||||
int answer_needed = 0;
|
||||
int i;
|
||||
int is_inside_subnet = 0;
|
||||
int is_inside_client_range = 0;
|
||||
unsigned long int ARP_client_IP;
|
||||
unsigned long int ARP_requested_IP;
|
||||
unsigned char ARP_client_MAC[6];
|
||||
|
||||
unsigned char ARP_answ_packet[50] = {
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // dest MAC
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source MAC
|
||||
0x08, 0x06, // Ethtype ARP
|
||||
0x00, 0x01, // HW type Ethernet
|
||||
0x08, 0x00, // protocol IPv4
|
||||
0x06, // HW addr size
|
||||
0x04, // protocol size
|
||||
0x00, 0x02 // ARP opcode "reply"
|
||||
};
|
||||
|
||||
ARP_client_IP = IP_char2int (ARP_req_packet+28); //in request : client = sender
|
||||
ARP_requested_IP = IP_char2int (ARP_req_packet+38); //in request : server = target
|
||||
for (i=0; i<6; i++) {
|
||||
ARP_client_MAC[i] = ARP_req_packet[22+i]; // in request : client = sender
|
||||
}
|
||||
|
||||
// determines if modem should reply or not
|
||||
if (ARP_requested_IP != LAN_conf_applied.LAN_modem_IP) { //only replies to non-modem IP
|
||||
|
||||
if (is_TDMA_master == 1) {
|
||||
//TDMA Master (and FDD down) answers to all IP in radio range
|
||||
if ( (ARP_requested_IP >= CONF_radio_IP_start) && (ARP_requested_IP < (CONF_radio_IP_start + CONF_radio_IP_size) ) ) {
|
||||
answer_needed = 1;
|
||||
}
|
||||
}
|
||||
else { //TDMA Slave answers to IP inside subnet, but which dont belong to it's own range
|
||||
if ( (ARP_requested_IP & LAN_conf_applied.LAN_subnet_mask) == (LAN_conf_applied.LAN_modem_IP & LAN_conf_applied.LAN_subnet_mask) ) {
|
||||
is_inside_subnet = 1;
|
||||
}
|
||||
if ( (ARP_requested_IP >= LAN_conf_applied.DHCP_range_start) && (ARP_requested_IP < (LAN_conf_applied.DHCP_range_start + LAN_conf_applied.DHCP_range_size)) ) {
|
||||
is_inside_client_range = 1;
|
||||
}
|
||||
if ( (is_inside_subnet == 1) && (is_inside_client_range == 0) ) {
|
||||
answer_needed = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (answer_needed) {
|
||||
for (i=0; i<6; i++) { // Destination MAC
|
||||
ARP_answ_packet[i] = ARP_client_MAC[i];
|
||||
}
|
||||
for (i=0; i<6; i++) { // Source MAC
|
||||
ARP_answ_packet[i+6] = CONF_modem_MAC[i];
|
||||
}
|
||||
for (i=0; i<6; i++) { // ARP Sender MAC
|
||||
ARP_answ_packet[i+22] = CONF_modem_MAC[i];
|
||||
}
|
||||
//IP_int2char (LAN_config.LAN_modem_IP, (ARP_answ_packet + 28) ); // ARP sender IP
|
||||
IP_int2char (ARP_requested_IP, (ARP_answ_packet + 28) ); // ARP sender IP
|
||||
for (i=0; i<6; i++) { // ARP Target MAC
|
||||
ARP_answ_packet[i+32] = ARP_client_MAC[i];
|
||||
}
|
||||
IP_int2char (ARP_client_IP, (ARP_answ_packet + 38) ); //ARP target IP
|
||||
|
||||
W5500_write_TX_buffer(W5500_p1, 0, ARP_answ_packet, 42, 0);
|
||||
}
|
||||
}
|
||||
|
||||
void ARP_client_request (unsigned long int IP_requested) {
|
||||
unsigned char ARP_packet[50] = {
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // dest MAC
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source MAC
|
||||
0x08, 0x06, // Ethtype ARP
|
||||
0x00, 0x01, // HW type Ethernet
|
||||
0x08, 0x00, // protocol IPv4
|
||||
0x06, // HW addr size
|
||||
0x04, // protocol size
|
||||
0x00, 0x01 // ARP opcode "request"
|
||||
};
|
||||
int i;
|
||||
for (i=0; i<6; i++) { // source MAC
|
||||
ARP_packet[i+6] = CONF_modem_MAC[i];
|
||||
}
|
||||
for (i=0; i<6; i++) { // ARP sender MAC
|
||||
ARP_packet[i+22] = CONF_modem_MAC[i];
|
||||
}
|
||||
IP_int2char (LAN_conf_applied.LAN_modem_IP, (ARP_packet + 28) ); //ARP sender IP
|
||||
for (i=0; i<6; i++) { // target MAC : unknown
|
||||
ARP_packet[i+32] = 0;
|
||||
}
|
||||
IP_int2char (IP_requested, (ARP_packet + 38) ); //ARP Target IP
|
||||
W5500_write_TX_buffer(W5500_p1, 0, ARP_packet, 42, 0);
|
||||
}
|
||||
|
||||
void ARP_client_answer_treatment (unsigned char* ARP_RX_packet, int size) {
|
||||
unsigned long int ARP_sender_IP;
|
||||
unsigned long int ARP_target_IP;
|
||||
unsigned char ARP_sender_MAC[6];
|
||||
int entry_already_exists = 0;
|
||||
int i_existing_entry = 0;
|
||||
int i_free_entry = 255;
|
||||
int i;
|
||||
|
||||
ARP_sender_IP = IP_char2int (ARP_RX_packet+28);
|
||||
ARP_target_IP = IP_char2int (ARP_RX_packet+38);
|
||||
for (i=0; i<6; i++) {
|
||||
ARP_sender_MAC[i] = ARP_RX_packet[22+i];
|
||||
}
|
||||
if (ARP_target_IP == LAN_conf_applied.LAN_modem_IP) { //if ARP reply is for us
|
||||
//first look for existing entry
|
||||
//printf("ARP reply is for us IP %X\r\n", ARP_sender_IP);
|
||||
entry_already_exists = 0;
|
||||
for (i=0; i<DHCP_ARP_tab_size; i++) {
|
||||
if (DHCP_ARP_IP[i] == ARP_sender_IP) {
|
||||
entry_already_exists = 1;
|
||||
i_existing_entry = i;
|
||||
//printf ("matches %i\r\n", i);
|
||||
}
|
||||
}
|
||||
if (entry_already_exists == 1) { // replace existing entry
|
||||
//printf("ARP entry already exists %i\r\n", i_existing_entry);
|
||||
for (i=0; i<6; i++) {
|
||||
DHCP_ARP_MAC[i_existing_entry][i] = ARP_sender_MAC[i];
|
||||
}
|
||||
DHCP_ARP_status[i_existing_entry] = 2; // valid entry
|
||||
DHCP_ARP_date[i_existing_entry] = GLOBAL_timer.read_us();
|
||||
}
|
||||
else { // no entry, lookfor empty slot
|
||||
for (i=DHCP_ARP_tab_size-1; i>=0; i--) {
|
||||
if ( DHCP_ARP_status[i] == 0 ) {
|
||||
i_free_entry = i;
|
||||
}
|
||||
}
|
||||
if (i_free_entry < DHCP_ARP_tab_size) {// free entry exists
|
||||
for (i=0; i<6; i++) {
|
||||
DHCP_ARP_MAC[i_free_entry][i] = ARP_sender_MAC[i];
|
||||
}
|
||||
DHCP_ARP_status[i_free_entry] = 2; // valid entry
|
||||
DHCP_ARP_IP[i_free_entry] = ARP_sender_IP;
|
||||
DHCP_ARP_date[i_free_entry] = GLOBAL_timer.read_us();
|
||||
}
|
||||
}
|
||||
}
|
||||
flush_temp_Eth_buffer (ARP_sender_IP);
|
||||
}
|
||||
|
||||
void ARP_RX_packet_treatment (unsigned char* ARP_RX_packet, int size) {
|
||||
unsigned int ARP_protocol_type;
|
||||
unsigned int ARP_opcode;
|
||||
unsigned long int ARP_sender_IP;
|
||||
unsigned long int ARP_target_IP;
|
||||
ARP_protocol_type = ARP_RX_packet[16]*0x100 + ARP_RX_packet[17];
|
||||
ARP_opcode = ARP_RX_packet[20]*0x100 + ARP_RX_packet[21];
|
||||
if ( (ARP_protocol_type == 0x0800) && (ARP_opcode == 0x0001) ) { // request
|
||||
//printf ("ARP request\r\n");
|
||||
ARP_sender_IP = IP_char2int (ARP_RX_packet+28);
|
||||
ARP_target_IP = IP_char2int (ARP_RX_packet+38);
|
||||
if (ARP_sender_IP != ARP_target_IP) {//ignores gratuitous ARP request
|
||||
//printf ("real ARP request\r\n");
|
||||
ARP_proxy(ARP_RX_packet, size);
|
||||
}
|
||||
else {
|
||||
//printf ("gratuitous!\r\n");
|
||||
}
|
||||
}
|
||||
if ( (ARP_protocol_type == 0x0800) && (ARP_opcode == 0x0002) ) { // reply
|
||||
//printf ("ARP reply\r\n");
|
||||
if ( (LAN_conf_applied.DHCP_server_active == 0) || (is_TDMA_master) ){//only active if modem is no DHCP server
|
||||
ARP_client_answer_treatment (ARP_RX_packet, size);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DHCP_ARP_periodic_free_table () {
|
||||
int i;
|
||||
unsigned int loc_age;
|
||||
for (i=0; i<DHCP_ARP_tab_size; i++) {
|
||||
loc_age = GLOBAL_timer.read_us() - DHCP_ARP_date[i];
|
||||
if ( (DHCP_ARP_status[i] == 2) && (loc_age > 1000000 * DHCP_ARP_timeout) ) {
|
||||
DHCP_ARP_status[i] = 3;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// *** generic functions ***
|
||||
int lookfor_MAC_from_IP (unsigned char* MAC_out, unsigned long int IP_addr) {
|
||||
int result = 0;
|
||||
int i;
|
||||
int i_found = 300;
|
||||
unsigned int age_loc=0;
|
||||
if ( (LAN_conf_applied.DHCP_server_active == 1) && (is_TDMA_master == 0) ) { //resolution for DHCP
|
||||
i_found = 300;
|
||||
for (i=0; i<DHCP_ARP_tab_size; i++) {
|
||||
if ( (DHCP_ARP_IP[i] == IP_addr) && (DHCP_ARP_status[i] == 2) ) {
|
||||
i_found = i;
|
||||
}
|
||||
}
|
||||
if (i_found < DHCP_ARP_tab_size) {
|
||||
for (i=0; i<6; i++) {
|
||||
MAC_out[i] = DHCP_ARP_MAC[i_found][i];
|
||||
}
|
||||
result = 1;
|
||||
}
|
||||
}
|
||||
else { // resolution for ARP (DHCP not active)
|
||||
i_found = 300;
|
||||
for (i=0; i<DHCP_ARP_tab_size; i++) {
|
||||
if ( (DHCP_ARP_IP[i] == IP_addr) && ( (DHCP_ARP_status[i] == 2) || (DHCP_ARP_status[i] == 3) ) ) {
|
||||
i_found = i;
|
||||
}
|
||||
}
|
||||
if (i_found < DHCP_ARP_tab_size) { // existing entry
|
||||
age_loc = GLOBAL_timer.read_us() - DHCP_ARP_date[i_found];
|
||||
age_loc = age_loc / 1000000;
|
||||
if (age_loc < (DHCP_ARP_timeout / 2) ) {
|
||||
for (i=0; i<6; i++) {
|
||||
MAC_out[i] = DHCP_ARP_MAC[i_found][i];
|
||||
}
|
||||
result = 1;
|
||||
}
|
||||
else if (age_loc < DHCP_ARP_timeout) {
|
||||
for (i=0; i<6; i++) {
|
||||
MAC_out[i] = DHCP_ARP_MAC[i_found][i];
|
||||
}
|
||||
result = 1;
|
||||
ARP_client_request(IP_addr);
|
||||
}
|
||||
else {
|
||||
ARP_client_request(IP_addr); //
|
||||
IP_addr = 0;
|
||||
result = 0;
|
||||
}
|
||||
}
|
||||
else {//no entry found, send ARP request
|
||||
ARP_client_request(IP_addr); //
|
||||
IP_addr = 0;
|
||||
result = 0;
|
||||
}
|
||||
}
|
||||
return result; // 0 if no entry found yet (most often: ARP resolution not yet answered)
|
||||
// 1 if entry present
|
||||
}
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
// This file is part of "NPR70 modem firmware" software
|
||||
// (A GMSK data modem for ham radio 430-440MHz, at several hundreds of kbps)
|
||||
// Copyright (c) 2017-2018 Guillaume F. F4HDK (amateur radio callsign)
|
||||
//
|
||||
// "NPR70 modem firmware" is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// "NPR70 modem firmware" is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with "NPR70 modem firmware". If not, see <http://www.gnu.org/licenses/>
|
||||
|
||||
#ifndef DHCP_ARP_F4
|
||||
#define DHCP_ARP_F4
|
||||
|
||||
#include "mbed.h"
|
||||
#include "W5500.h"
|
||||
#include "global_variables.h"
|
||||
|
||||
void reset_DHCP_table(LAN_conf_T* LAN_config);
|
||||
|
||||
int lookfor_free_LAN_IP (LAN_conf_T* LAN_config, unsigned char* client_MAC, unsigned char* requested_IP, unsigned char* proposed_IP, int req_type);
|
||||
|
||||
void DHCP_server(LAN_conf_T* LAN_config, W5500_chip* W5500);
|
||||
|
||||
void DHCP_ARP_print_entries(void);
|
||||
|
||||
// *** ARP part ***
|
||||
void ARP_proxy (unsigned char* ARP_RX_packet);
|
||||
|
||||
void ARP_client_request (unsigned long int IP);
|
||||
|
||||
void ARP_client_answer_treatment (unsigned char* ARP_RX_packet, int size);
|
||||
|
||||
void ARP_RX_packet_treatment (unsigned char* ARP_RX_packet, int size);
|
||||
|
||||
int lookfor_MAC_from_IP (unsigned char* MAC_out, unsigned long int IP_addr);
|
||||
|
||||
void DHCP_ARP_periodic_free_table (void);
|
||||
|
||||
#endif
|
||||
+302
@@ -0,0 +1,302 @@
|
||||
// This file is part of "NPR70 modem firmware" software
|
||||
// (A GMSK data modem for ham radio 430-440MHz, at several hundreds of kbps)
|
||||
// Copyright (c) 2017-2020 Guillaume F. F4HDK (amateur radio callsign)
|
||||
//
|
||||
// "NPR70 modem firmware" is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// "NPR70 modem firmware" is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with "NPR70 modem firmware". If not, see <http://www.gnu.org/licenses/>
|
||||
|
||||
#include "Eth_IPv4.h"
|
||||
#include "mbed.h"
|
||||
#include "global_variables.h"
|
||||
#include "L1L2_radio.h"
|
||||
#include "DHCP_ARP.h"
|
||||
|
||||
static unsigned char temp_Eth_buffer[1600];//temporary buffer waiting for ARP entry
|
||||
static unsigned long int temp_Eth_buff_IP;
|
||||
static int temp_Eth_buff_size = 0;
|
||||
|
||||
unsigned long int IP_char2int(unsigned char* IP_char) {
|
||||
unsigned long int result;
|
||||
result = 0x1000000*IP_char[0] + 0x10000*IP_char[1] + 0x100*IP_char[2] + IP_char[3];
|
||||
return result;
|
||||
}
|
||||
|
||||
void IP_int2char (unsigned long int IP_int, unsigned char* IP_char) {
|
||||
IP_char[0] = (IP_int & 0xFF000000) / 0x1000000;
|
||||
IP_char[1] = (IP_int & 0x00FF0000) / 0x10000;
|
||||
IP_char[2] = (IP_int & 0x0000FF00) / 0x100;
|
||||
IP_char[3] = (IP_int & 0xFF);
|
||||
}
|
||||
|
||||
//static unsigned char match_RTP_value[2][12] = {// FOR TEST ONLY
|
||||
// {0x00, 0x13, 0x3B, 0x73, 0x12, 0xAE},
|
||||
// {0x98, 0xDE, 0xD0, 0x01, 0x2D, 0x09}
|
||||
//}; //first ping test : MAC filter
|
||||
|
||||
//void init_RTP_filter(void) {
|
||||
//
|
||||
//}
|
||||
|
||||
int Eth_RX_dequeue (W5500_chip* W5500) {
|
||||
int answer=0;
|
||||
unsigned char RX_data[1600];//1600
|
||||
unsigned int RX_port=0;
|
||||
unsigned char RX_proto;
|
||||
unsigned long int RX_dest_IP=0;
|
||||
//unsigned char* RX_Eth_pckt;
|
||||
//static int match_RTP_index[12] = {8, 9, 10, 11, 12, 13}; //first ping tests : TX MAC filter
|
||||
|
||||
static int more_to_read = 0;
|
||||
|
||||
int RX_size=0;
|
||||
int mac_size=0;
|
||||
//int i;
|
||||
//int match_RTP = 1;
|
||||
unsigned int ethertype;
|
||||
if (*(W5500->interrupt)==0) {
|
||||
W5500_write_byte(W5500, 0x0002, 1, 0xFF);//ack interrupt
|
||||
more_to_read=1;
|
||||
}
|
||||
if ((more_to_read == 1)) {
|
||||
RX_size = W5500_read_received_size(W5500, 0);
|
||||
//if (RX_size > DEBUG_max_rx_size_w5500) {//!!!
|
||||
// DEBUG_max_rx_size_w5500 = RX_size;//!!!
|
||||
// printf("max buffer:%i\r\n", DEBUG_max_rx_size_w5500);//!!!
|
||||
//}//!!!
|
||||
if (RX_size > 0) {
|
||||
answer=1;
|
||||
|
||||
mac_size = W5500_read_MAC_pckt(W5500, 0, RX_data);
|
||||
if (RX_size > mac_size) {
|
||||
more_to_read = 1;
|
||||
} else {
|
||||
more_to_read = 0;
|
||||
}
|
||||
|
||||
// Check if RTP packet
|
||||
RX_Eth_IPv4_counter++;
|
||||
//match_RTP = 1;
|
||||
//for (i=0; i<=6; i++) {
|
||||
// if (RX_data[match_RTP_index[i]] != match_RTP_value[is_TDMA_master][i]) {
|
||||
// match_RTP = 0;
|
||||
// }
|
||||
|
||||
//}
|
||||
// FOR FUTURE VIRTUAL CHANNEL
|
||||
//if (match_RTP==1) {
|
||||
// W5500_write_TX_buffer(W5500, 2, RX_data+44, mac_size-44, 0);
|
||||
//}
|
||||
|
||||
ethertype = RX_data[14]*0x100 + RX_data[15];
|
||||
|
||||
if (ethertype == 0x0806) { //ARP packet received
|
||||
//printf("ARP packet received!\r\n");
|
||||
if ((is_TDMA_master == 0)||(CONF_master_FDD<2)) {
|
||||
ARP_RX_packet_treatment (RX_data+2, mac_size-2);
|
||||
}
|
||||
}
|
||||
|
||||
if (ethertype == 0x0800) { // IPv4 packet
|
||||
RX_port = 0;
|
||||
RX_proto = 0;
|
||||
RX_dest_IP = 0;
|
||||
if ( (is_TDMA_master==1) && (CONF_master_FDD == 1) ) {//master down
|
||||
//RX_Eth_pckt = RX_data+2;
|
||||
RX_port = (RX_data[38] << 8) + RX_data[39];
|
||||
RX_proto = RX_data[25];//11 for UDP
|
||||
RX_dest_IP = IP_char2int(RX_data+32);
|
||||
}
|
||||
if ( (RX_proto == 0x11) && (RX_dest_IP == LAN_conf_applied.LAN_modem_IP) && (RX_port == 0x1A3C) ) { // data for FDD down
|
||||
//printf("RX_from_Eth\r\n");
|
||||
FDDdown_RX_pckt_treat(RX_data+44, mac_size-44);
|
||||
} else {
|
||||
//printf("RXeth %i\r\n", mac_size-2);
|
||||
IPv4_to_radio (RX_data+2, mac_size-2);
|
||||
//Eth_pause_frame_TX(10);//!!!
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
return answer;
|
||||
}
|
||||
|
||||
void Eth_pause_frame_TX(unsigned int time) {
|
||||
int i;
|
||||
unsigned char pause_frame[70] = {
|
||||
0x01, 0x80, 0xC2, 0x00, 0x00, 0x01,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x88, 0x08, 0x00, 0x01, 0x4E, 0x70,/* 0x17, 0x70 */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
for (i=0; i<6; i++) {
|
||||
pause_frame[i+6] = CONF_modem_MAC[i];
|
||||
}
|
||||
W5500_write_TX_buffer(W5500_p1, 0, pause_frame, 60, 0);
|
||||
}
|
||||
|
||||
void IPv4_to_radio (unsigned char* RX_Eth_frame, int size) {
|
||||
int i;
|
||||
unsigned long int dest_IP_addr;
|
||||
int MAC_dest_match = 1;
|
||||
int is_inside_subnet = 0;
|
||||
int is_inside_client_range = 0;
|
||||
unsigned char loc_client_ID;
|
||||
int radio_tx_need;
|
||||
for (i=0; i<6; i++) {
|
||||
if (RX_Eth_frame[i] != CONF_modem_MAC[i]) {
|
||||
MAC_dest_match = 0;
|
||||
}
|
||||
}
|
||||
radio_tx_need = 0;
|
||||
if (MAC_dest_match == 1) {//we only take frame with destination = modem_MAC, not broadcast or multicast
|
||||
dest_IP_addr = IP_char2int(RX_Eth_frame+30);
|
||||
|
||||
if ( (is_TDMA_master == 1) && (dest_IP_addr != LAN_conf_applied.LAN_modem_IP) ) { // TDMA Master
|
||||
if ( (dest_IP_addr >= CONF_radio_IP_start) && (dest_IP_addr < (CONF_radio_IP_start + CONF_radio_IP_size) ) ) {
|
||||
loc_client_ID = lookfor_client_ID_from_IP (dest_IP_addr);
|
||||
//printf ("IP %X is client %i\r\n", dest_IP_addr, loc_client_ID);
|
||||
if (loc_client_ID < 250) {
|
||||
radio_tx_need = 1;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( (is_TDMA_master == 0) && (dest_IP_addr != LAN_conf_applied.LAN_modem_IP) ) { // TDMA Client
|
||||
if ( (dest_IP_addr & LAN_conf_applied.LAN_subnet_mask) == (LAN_conf_applied.LAN_modem_IP & LAN_conf_applied.LAN_subnet_mask) ) {
|
||||
is_inside_subnet = 1;
|
||||
}
|
||||
if ( (dest_IP_addr >= LAN_conf_applied.DHCP_range_start) && (dest_IP_addr < (LAN_conf_applied.DHCP_range_start + LAN_conf_applied.DHCP_range_size)) ) {
|
||||
is_inside_client_range = 1;
|
||||
}
|
||||
//printf ("inside subnet:%i inside_DHCP%i\r\n", is_inside_subnet, is_inside_client_range);
|
||||
// inside subnet but outside radio range -> to master
|
||||
if ( (is_inside_subnet == 1) && (is_inside_client_range == 0) ) {
|
||||
loc_client_ID = my_radio_client_ID;
|
||||
radio_tx_need = 1;
|
||||
}
|
||||
// outside subnet and IP gateway active -> to master
|
||||
if ( (is_inside_subnet == 0) && (LAN_conf_applied.LAN_def_route_activ == 1) ) {
|
||||
loc_client_ID = my_radio_client_ID;
|
||||
radio_tx_need = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if ( (radio_tx_need) && (my_client_radio_connexion_state == 2) ) {
|
||||
segment_and_push(RX_Eth_frame + 14, size - 14, loc_client_ID, 0x02); //0x02 is IPv4 access protocol
|
||||
//printf("seg&push %i\r\n", size - 14);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void IPv4_from_radio (unsigned char* RX_eth_frame, int RX_size) { //Rx size includes ethernet header
|
||||
unsigned long int dest_IP_addr;
|
||||
unsigned long int LAN_dest_IP;
|
||||
int local_size;
|
||||
int dest_MAC_found;
|
||||
int is_inside_subnet = 0;
|
||||
int is_inside_radio_range = 0;
|
||||
unsigned char loc_client_ID;
|
||||
int i;
|
||||
//dest_IP_addr = IP_char2int(RX_radio_frame+16)
|
||||
int eth_TX_need = 0;
|
||||
int radio_tx_need = 0;
|
||||
dest_IP_addr = IP_char2int(RX_eth_frame + 30);
|
||||
|
||||
local_size = 0x100*RX_eth_frame[16] + RX_eth_frame[17];
|
||||
//printf("size IPv4 : %i\r\n", local_size);
|
||||
|
||||
//printf (" IPv4 radio RX\r\n");
|
||||
if (is_TDMA_master == 1) { // TDMA Master
|
||||
if ( (dest_IP_addr & LAN_conf_applied.LAN_subnet_mask) == (LAN_conf_applied.LAN_modem_IP & LAN_conf_applied.LAN_subnet_mask) ) {
|
||||
is_inside_subnet = 1;
|
||||
}
|
||||
if ( (dest_IP_addr >= CONF_radio_IP_start) && (dest_IP_addr < (CONF_radio_IP_start + CONF_radio_IP_size) ) ) {
|
||||
is_inside_radio_range = 1;
|
||||
}
|
||||
//printf("IPv4 from R: inside subnet:%i inside_radio:%i\r\n", is_inside_subnet, is_inside_radio_range);
|
||||
// destinated to IP on LAN
|
||||
if ( (is_inside_subnet == 1) && (is_inside_radio_range == 0) ) {
|
||||
eth_TX_need = 1;
|
||||
LAN_dest_IP = dest_IP_addr;
|
||||
}
|
||||
// destinated to gateway (out of subnet)
|
||||
if ( (is_inside_subnet == 0) && (LAN_conf_applied.LAN_def_route_activ == 1) ) {
|
||||
eth_TX_need = 1;
|
||||
LAN_dest_IP = LAN_conf_applied.LAN_def_route;
|
||||
}
|
||||
//forward to another radio client
|
||||
if (is_inside_radio_range) {
|
||||
loc_client_ID = lookfor_client_ID_from_IP (dest_IP_addr);
|
||||
if (loc_client_ID < 250) {
|
||||
radio_tx_need = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (is_TDMA_master == 0) { // TDMA client
|
||||
// Checks if dest IP is inside local range
|
||||
if ( (dest_IP_addr >= LAN_conf_applied.DHCP_range_start) && (dest_IP_addr < (LAN_conf_applied.DHCP_range_start + LAN_conf_applied.DHCP_range_size)) ) {
|
||||
eth_TX_need = 1;
|
||||
LAN_dest_IP = dest_IP_addr;
|
||||
}
|
||||
}
|
||||
// transmit to Ethernet
|
||||
if ( (eth_TX_need) && (local_size < 1510) ) {
|
||||
//printf("IPv4 Eth TX\r\n");
|
||||
for (i=0; i<6; i++) {
|
||||
RX_eth_frame[i+6] = CONF_modem_MAC[i];
|
||||
}
|
||||
RX_eth_frame[12] = 0x08; // Ethertype IPv4
|
||||
RX_eth_frame[13] = 0x00;
|
||||
dest_MAC_found = lookfor_MAC_from_IP (RX_eth_frame, LAN_dest_IP);
|
||||
if (dest_MAC_found) {
|
||||
W5500_write_TX_buffer(W5500_p1, 0, RX_eth_frame, local_size + 14, 0);
|
||||
//RX_radio_IPv4_counter++;
|
||||
}
|
||||
else {
|
||||
temp_Eth_buff_IP = LAN_dest_IP;
|
||||
temp_Eth_buff_size = local_size + 14;
|
||||
memcpy (temp_Eth_buffer, RX_eth_frame, temp_Eth_buff_size);
|
||||
}
|
||||
}
|
||||
// transmit to radio
|
||||
if (radio_tx_need) {
|
||||
segment_and_push(RX_eth_frame + 14, local_size, loc_client_ID, 0x02); //0x02 is IPv4 access protocol
|
||||
//TX_radio_IPv4_counter++;
|
||||
}
|
||||
}
|
||||
|
||||
void flush_temp_Eth_buffer(unsigned long int loc_IP) {
|
||||
if (temp_Eth_buff_size > 0) {
|
||||
if (loc_IP == temp_Eth_buff_IP) {
|
||||
lookfor_MAC_from_IP (temp_Eth_buffer, loc_IP); //puts MAC inside Eth
|
||||
W5500_write_TX_buffer(W5500_p1, 0, temp_Eth_buffer, temp_Eth_buff_size, 0);
|
||||
//RX_radio_IPv4_counter++;
|
||||
}
|
||||
temp_Eth_buff_size = 0;
|
||||
}
|
||||
}
|
||||
|
||||
unsigned char lookfor_client_ID_from_IP(unsigned long int IP_addr) {
|
||||
unsigned char i, i_found;
|
||||
unsigned long int last_IP;
|
||||
i_found = 250;
|
||||
|
||||
for (i=0; i<radio_addr_table_size; i++) {
|
||||
last_IP = CONF_radio_addr_table_IP_begin[i] + CONF_radio_addr_table_IP_size[i];
|
||||
if ( (IP_addr >= CONF_radio_addr_table_IP_begin[i]) && (IP_addr < last_IP) ) {
|
||||
i_found = i;
|
||||
}
|
||||
}
|
||||
return i_found;
|
||||
}
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
// This file is part of "NPR70 modem firmware" software
|
||||
// (A GMSK data modem for ham radio 430-440MHz, at several hundreds of kbps)
|
||||
// Copyright (c) 2017-2020 Guillaume F. F4HDK (amateur radio callsign)
|
||||
//
|
||||
// "NPR70 modem firmware" is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// "NPR70 modem firmware" is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with "NPR70 modem firmware". If not, see <http://www.gnu.org/licenses/>
|
||||
|
||||
#ifndef Eth_IPv4_F4
|
||||
#define Eth_IPv4_F4
|
||||
|
||||
#include "mbed.h"
|
||||
#include "W5500.h"
|
||||
|
||||
unsigned long int IP_char2int(unsigned char* IP_char);
|
||||
|
||||
void IP_int2char (unsigned long int IP_int, unsigned char* IP_char);
|
||||
|
||||
//void init_RTP_filter(void);
|
||||
|
||||
//int PS_read_from_ethernet(W5500_chip* W5500);
|
||||
int Eth_RX_dequeue (W5500_chip* W5500);
|
||||
|
||||
void Eth_pause_frame_TX(unsigned int time);
|
||||
|
||||
void IPv4_to_radio (unsigned char* RX_Eth_frame, int size);
|
||||
|
||||
void IPv4_from_radio (unsigned char* RX_eth_frame, int RX_size);
|
||||
|
||||
void flush_temp_Eth_buffer(unsigned long int loc_IP);
|
||||
|
||||
unsigned char lookfor_client_ID_from_IP(unsigned long int IP_addr);
|
||||
|
||||
#endif
|
||||
+945
@@ -0,0 +1,945 @@
|
||||
// This file is part of "NPR70 modem firmware" software
|
||||
// (A GMSK data modem for ham radio 430-440MHz, at several hundreds of kbps)
|
||||
// Copyright (c) 2017-2020 Guillaume F. F4HDK (amateur radio callsign)
|
||||
//
|
||||
// "NPR70 modem firmware" is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// "NPR70 modem firmware" is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with "NPR70 modem firmware". If not, see <http://www.gnu.org/licenses/>
|
||||
|
||||
#include "HMI_telnet.h"
|
||||
#include "mbed.h"
|
||||
#include "global_variables.h"
|
||||
#include "Eth_IPv4.h"
|
||||
#include "signaling.h"
|
||||
#include "config_flash.h"
|
||||
#include "W5500.h"
|
||||
#include "SI4463.h"
|
||||
#include "TDMA.h"
|
||||
#include "DHCP_ARP.h"
|
||||
#include "L1L2_radio.h"
|
||||
|
||||
static char current_rx_line[100];
|
||||
//static char HMI_out_str[100];
|
||||
static int current_rx_line_count = 0;
|
||||
static int is_telnet_opened = 0;
|
||||
static int echo_ON = 1;
|
||||
static int display_status_ongoing = 0;
|
||||
static int display_who_ongoing = 0;
|
||||
static int slow_counter = 0;
|
||||
|
||||
static unsigned int telnet_last_activity;
|
||||
|
||||
int telnet_loop (W5500_chip* W5500) {
|
||||
static unsigned char previous_state = 0;
|
||||
unsigned char RX_data[100];
|
||||
unsigned char TX_data[100];
|
||||
unsigned char current_state;
|
||||
unsigned int timer_snapshot;
|
||||
char loc_char;
|
||||
int RX_size = 0;
|
||||
int i, j;
|
||||
int result;
|
||||
|
||||
result=0;
|
||||
|
||||
current_state = W5500_read_byte(W5500, 0x0003, 0x05);
|
||||
//printf("state: %x\r\n", current_state);
|
||||
if ((current_state == 0x17) && (previous_state != 0x17)) {
|
||||
W5500_read_long(W5500, 0x000C, 0x05, RX_data, 4);
|
||||
printf("\r\n\r\nnew telnet connexion from %i.%i.%i.%i\r\nserial inactive...\r\n", RX_data[0], RX_data[1], RX_data[2], RX_data[3]);
|
||||
fflush(stdout);
|
||||
//TX_data[0] = 0xFF; //IAC
|
||||
//TX_data[1] = 0xFB; //WILL FB DO FD
|
||||
//TX_data[2] = 1; //echo 1 RTCE 7
|
||||
//TX_data[3] = 0;
|
||||
TX_data[0] = 0xFF; //IAC
|
||||
TX_data[1] = 0xFB; //WILL
|
||||
TX_data[2] = 0x01; //Echo
|
||||
//TX_data[3] = 0;
|
||||
TX_data[3] = 0xFF; //IAC
|
||||
TX_data[4] = 0xFD; //DO
|
||||
TX_data[5] = 0x03; //Suppr GA
|
||||
TX_data[6] = 0xFF; //IAC
|
||||
TX_data[7] = 0xFB; //WILL
|
||||
TX_data[8] = 0x03; //Suppr GA
|
||||
TX_data[9] = 0;
|
||||
strcat((char*)TX_data, "NPR modem\r\nready> ");
|
||||
W5500_write_TX_buffer (W5500, 1, TX_data, 27, 0); //27
|
||||
//HMI_printf("ready>");
|
||||
is_telnet_opened = 1;
|
||||
current_rx_line_count = 0;
|
||||
echo_ON = 1;
|
||||
display_status_ongoing = 0;
|
||||
display_who_ongoing = 0;
|
||||
telnet_last_activity = GLOBAL_timer.read_us();
|
||||
}
|
||||
|
||||
if (current_state==0x1C) { // close wait to close
|
||||
W5500_write_byte(W5500, 0x0001, 0x05, 0x10);
|
||||
printf("telnet connexion closed\r\nready> ");
|
||||
fflush(stdout);
|
||||
is_telnet_opened = 0;
|
||||
current_rx_line_count = 0;
|
||||
echo_ON = 1;
|
||||
display_status_ongoing = 0;
|
||||
display_who_ongoing = 0;
|
||||
}
|
||||
|
||||
if (current_state==0x00) { //closed to open
|
||||
W5500_write_byte(W5500, 0x0001, 0x05, 0x01);
|
||||
//printf("open \r\n");
|
||||
result=1;
|
||||
}
|
||||
|
||||
if (current_state==0x13) { //opened to listen
|
||||
W5500_write_byte(W5500, 0x0001, 0x05, 0x02);
|
||||
//printf("listen \r\n");
|
||||
}
|
||||
previous_state = current_state;
|
||||
if (is_telnet_opened) {
|
||||
RX_size = W5500_read_received_size(W5500, 1);
|
||||
timer_snapshot = GLOBAL_timer.read_us();
|
||||
if ((timer_snapshot - telnet_last_activity) > 300000000) { //300000000
|
||||
//HMI_printf("Telnet inactivity timeout. Force exit.\r\n");
|
||||
W5500_write_byte(W5500_p1, 0x0001, 0x05, 0x08); //close TCP
|
||||
is_telnet_opened = 0;
|
||||
echo_ON = 1;
|
||||
display_status_ongoing = 0;
|
||||
display_who_ongoing = 0;
|
||||
printf("telnet connexion closed\r\nready> ");
|
||||
fflush(stdout);
|
||||
}
|
||||
//timeout
|
||||
}
|
||||
if (RX_size > 0) {
|
||||
telnet_last_activity = GLOBAL_timer.read_us();
|
||||
result=1;
|
||||
W5500_read_RX_buffer(W5500, 1, RX_data, RX_size);
|
||||
RX_data[RX_size] = 0;
|
||||
i = 0;
|
||||
j = 0;
|
||||
while (i < RX_size) {
|
||||
loc_char = (char)RX_data[i];
|
||||
//printf("%02X %c\r\n", loc_char, loc_char);
|
||||
if ( (loc_char >= 0x20) && (loc_char <= 0x7E) ) {//displayable char
|
||||
if ( (current_rx_line_count < 98) && (echo_ON) ) {
|
||||
TX_data[j]=RX_data[i];
|
||||
i++;
|
||||
j++;
|
||||
current_rx_line[current_rx_line_count] = loc_char;
|
||||
current_rx_line_count++;
|
||||
} else {
|
||||
i++;
|
||||
}
|
||||
}
|
||||
else { // special char
|
||||
if (loc_char == 0xFF) {//IAC
|
||||
if (RX_data[i+1] == 244) {//ctrl+C
|
||||
HMI_cancel_current();
|
||||
}
|
||||
i = i + 3;
|
||||
}
|
||||
else if ( ( (loc_char == 0x08) || (loc_char == 0x7F) ) && (echo_ON) ) { //backspace
|
||||
i++;
|
||||
|
||||
if (current_rx_line_count>0) {
|
||||
current_rx_line_count--;
|
||||
TX_data[j] = 0x08;
|
||||
TX_data[j+1] = 0x20;
|
||||
TX_data[j+2] = 0x08;
|
||||
j=j+3;
|
||||
}
|
||||
}
|
||||
else if ( (loc_char == 0x0D) && (echo_ON) ){ //end of line
|
||||
TX_data[j] = 0x0D;
|
||||
TX_data[j+1] = 0x0A;
|
||||
i++;
|
||||
j = j + 2;
|
||||
current_rx_line[current_rx_line_count] = 0;//null termination
|
||||
current_rx_line_count++;
|
||||
W5500_write_TX_buffer (W5500, 1, TX_data, j, 0);
|
||||
j = 0;
|
||||
HMI_line_parse (current_rx_line, current_rx_line_count);
|
||||
current_rx_line_count = 0;
|
||||
}
|
||||
else if (loc_char == 0x03) { //ctrl + C
|
||||
HMI_cancel_current();
|
||||
//printf("CTRL + C\r\n");
|
||||
i++;
|
||||
} else {
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (j > 0) {
|
||||
W5500_write_TX_buffer (W5500, 1, TX_data, j, 0);
|
||||
}
|
||||
//printf("\r\n");
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
int serial_term_loop (void) {
|
||||
char loc_char;
|
||||
|
||||
if (pc.readable()) {
|
||||
loc_char = getc(pc);
|
||||
|
||||
if (is_telnet_opened == 0) {
|
||||
if ( (loc_char >= 0x20) && (loc_char <= 0x7E) ) {//printable char
|
||||
if ( (current_rx_line_count < 98) && (echo_ON) ) {
|
||||
putc(loc_char, pc);
|
||||
current_rx_line[current_rx_line_count] = loc_char;
|
||||
current_rx_line_count++;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ( ( (loc_char == 0x08) || (loc_char == 0x7F) ) && (echo_ON) ) {//backspace
|
||||
if (current_rx_line_count>0) {
|
||||
current_rx_line_count--;
|
||||
putc(0x08,pc);
|
||||
putc(0x20,pc);
|
||||
putc(0x08,pc);
|
||||
}
|
||||
}
|
||||
else if ( (loc_char == 0x0D) && (echo_ON) ) {
|
||||
printf("\r\n");
|
||||
current_rx_line[current_rx_line_count] = 0;
|
||||
current_rx_line_count++;
|
||||
HMI_line_parse (current_rx_line, current_rx_line_count);
|
||||
current_rx_line_count = 0;
|
||||
}
|
||||
else if (loc_char == 0x03) {//ctrl + c
|
||||
HMI_cancel_current();
|
||||
}
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void HMI_line_parse (char* RX_text, int RX_text_count) {
|
||||
char* loc_command_str;// [100];
|
||||
char* loc_param1_str;
|
||||
char* loc_param2_str;
|
||||
int command_understood = 0;
|
||||
int temp;
|
||||
|
||||
loc_command_str = strtok (RX_text, " ");
|
||||
loc_param1_str = strtok (NULL, " ");
|
||||
loc_param2_str = strtok (NULL, " ");
|
||||
|
||||
if (loc_command_str) {
|
||||
if (strcmp(loc_command_str, "radio") == 0) {
|
||||
command_understood = 1;
|
||||
if (strcmp(loc_param1_str, "on") == 0) {
|
||||
if (CONF_radio_state_ON_OFF == 0) {
|
||||
RADIO_on(1, 1, 1);
|
||||
}
|
||||
HMI_printf("OK\r\nready> ");
|
||||
}
|
||||
else if (strcmp(loc_param1_str, "off") == 0) {
|
||||
RADIO_off(1);
|
||||
HMI_printf("OK\r\nready> ");
|
||||
}
|
||||
else {
|
||||
HMI_printf("unknown radio command\r\nready> ");
|
||||
}
|
||||
}
|
||||
|
||||
if (strcmp(loc_command_str, "TX_test") == 0) {
|
||||
command_understood = 1;
|
||||
HMI_TX_test(loc_param1_str);
|
||||
}
|
||||
if ((strcmp(loc_command_str, "status") == 0) || (strcmp(loc_command_str, "s") == 0)) {//display status
|
||||
command_understood = 1;
|
||||
display_status_ongoing = 1;
|
||||
G_downlink_bandwidth_temp = 0;
|
||||
G_uplink_bandwidth_temp = 0;
|
||||
slow_counter = 0;
|
||||
echo_ON = 0;
|
||||
HMI_periodic_call();
|
||||
}
|
||||
if (strcmp(loc_command_str, "display") == 0) {
|
||||
command_understood = 1;
|
||||
if (strcmp(loc_param1_str, "config") == 0) {//display config
|
||||
HMI_display_config();
|
||||
}
|
||||
else if (strcmp(loc_param1_str, "static") == 0) {//display static alloc
|
||||
HMI_display_static();
|
||||
}
|
||||
else if (strcmp(loc_param1_str, "DHCP_ARP") == 0) {//display DHCP_ARP entries
|
||||
DHCP_ARP_print_entries();
|
||||
}
|
||||
else {
|
||||
HMI_printf("unknown display command\r\nready> ");
|
||||
}
|
||||
}
|
||||
if (strcmp(loc_command_str, "set") == 0) {
|
||||
HMI_set_command(loc_param1_str, loc_param2_str);
|
||||
command_understood = 1;
|
||||
}
|
||||
if ((strcmp(loc_command_str, "who") == 0) || (strcmp(loc_command_str, "w") == 0)) {
|
||||
//HMI_print_who();
|
||||
command_understood = 1;
|
||||
display_who_ongoing = 1;
|
||||
slow_counter = 0;
|
||||
echo_ON = 0;
|
||||
HMI_periodic_call();
|
||||
}
|
||||
if (strcmp(loc_command_str, "reboot") == 0) {
|
||||
command_understood = 1;
|
||||
HMI_reboot();
|
||||
}
|
||||
if (strcmp(loc_command_str, "save") == 0) {
|
||||
command_understood = 1;
|
||||
|
||||
RADIO_off_if_necessary(0);
|
||||
temp = NFPR_config_save();
|
||||
RADIO_restart_if_necessary(0, 0, 1);
|
||||
HMI_printf("saved index:%i\r\nready> ", temp);
|
||||
}
|
||||
if (strcmp(loc_command_str, "reset_to_default") == 0) {
|
||||
command_understood = 1;
|
||||
HMI_printf("clearing saved config...\r\n");
|
||||
RADIO_off_if_necessary(0);
|
||||
virt_EEPROM_errase_all();
|
||||
HMI_printf("Done. Now rebooting...\r\n");
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
if (strcmp(loc_command_str, "version") == 0) {
|
||||
command_understood = 1;
|
||||
HMI_printf("firmware: %s\r\nfreq band: %s\r\nready> ", FW_VERSION, FREQ_BAND);
|
||||
}
|
||||
if (strcmp(loc_command_str, "exit") == 0) {
|
||||
command_understood = 1;
|
||||
HMI_exit();
|
||||
}
|
||||
if (command_understood == 0) {
|
||||
HMI_printf("unknown command\r\nready> ");
|
||||
}
|
||||
//Add Help
|
||||
if (strcmp(loc_command_str, "help") == 0) {
|
||||
command_understood = 1;
|
||||
HMI_printf("HELP cmd: help, status (s), display config, display static, display DHCP_ARP,\
|
||||
\r\nset [params], radio, TX_test, who (w), save, reboot, version, reset_to_default, exit\
|
||||
\r\nready> ");
|
||||
}
|
||||
} else {//just a return with nothing
|
||||
HMI_printf("ready> ");
|
||||
}
|
||||
}
|
||||
|
||||
void HMI_cancel_current(void) {
|
||||
if (echo_ON ==0) {
|
||||
echo_ON = 1;
|
||||
display_status_ongoing = 0;
|
||||
display_who_ongoing = 0;
|
||||
HMI_printf("ready> ");
|
||||
}
|
||||
}
|
||||
|
||||
int HMI_check_radio_OFF(void) {
|
||||
if (CONF_radio_state_ON_OFF == 1) {
|
||||
HMI_printf("radio must be off for this command\r\nready> ");
|
||||
return 0;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void HMI_TX_test(char* duration_txt) {
|
||||
unsigned int duration;
|
||||
if ( HMI_check_radio_OFF() == 1) {
|
||||
sscanf (duration_txt, "%i", &duration);
|
||||
HMI_printf("reconfiguring radio...\r\n");
|
||||
SI4463_configure_all();
|
||||
wait_ms(50);
|
||||
TDMA_init_all();
|
||||
//SI4463_radio_start();
|
||||
|
||||
wait_ms(1);
|
||||
G_SI4463->RX_TX_state = 0;
|
||||
SI4463_clear_IT(G_SI4463, 0, 0);
|
||||
wait_ms(10);
|
||||
CONF_radio_state_ON_OFF = 1;
|
||||
SI4463_TX_to_RX_transition();
|
||||
|
||||
wait_ms(10);
|
||||
CONF_radio_state_ON_OFF = 0;
|
||||
if (is_TDMA_master == 0 ) {
|
||||
my_client_radio_connexion_state = 1;
|
||||
my_radio_client_ID = 0x7E;
|
||||
}
|
||||
wait_ms(50);
|
||||
|
||||
TDMA_NULL_frame_init(70);
|
||||
HMI_printf("radio transmit test %i seconds...\r\n", duration);
|
||||
duration = duration * 1000; //milliseconds instead of seconds
|
||||
|
||||
SI4432_TX_test(duration);
|
||||
|
||||
HMI_printf("ready> ");
|
||||
}
|
||||
}
|
||||
|
||||
void HMI_reboot(void) {
|
||||
if (is_telnet_opened == 1) {
|
||||
W5500_write_byte(W5500_p1, 0x0001, 0x05, 0x08);
|
||||
}
|
||||
//extern "C" void mbed_reset();
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
|
||||
void HMI_force_exit(void) {
|
||||
unsigned char IP_loc[8];
|
||||
if (is_telnet_opened == 1) {
|
||||
IP_int2char (LAN_conf_applied.LAN_modem_IP, IP_loc);
|
||||
//HMI_printf("\r\n\r\n\r\nNew IP config... force telnet exit.\r\n");
|
||||
//HMI_printf("\r\n\r\nNew IP config. Open new telnet session with: %i.%i.%i.%i\r\n\r\n", IP_loc[0], IP_loc[1], IP_loc[2], IP_loc[3]);
|
||||
W5500_write_byte(W5500_p1, 0x0001, 0x05, 0x08); //close TCP
|
||||
is_telnet_opened = 0;
|
||||
echo_ON = 1;
|
||||
display_status_ongoing = 0;
|
||||
printf("telnet connexion closed\r\nready> ");
|
||||
fflush(stdout);
|
||||
}
|
||||
}
|
||||
|
||||
void HMI_exit(void) {
|
||||
if (is_telnet_opened == 1) {
|
||||
W5500_write_byte(W5500_p1, 0x0001, 0x05, 0x08); //close TCP
|
||||
is_telnet_opened = 0;
|
||||
echo_ON = 1;
|
||||
display_status_ongoing = 0;
|
||||
printf("telnet connexion closed\r\nready> ");
|
||||
fflush(stdout);
|
||||
} else {
|
||||
printf("exit only valid for telnet\r\nready> ");
|
||||
fflush(stdout);
|
||||
}
|
||||
}
|
||||
|
||||
static char HMI_yes_no[2][4]={'n','o',0,0, 'y','e','s',0};
|
||||
//static char HMI_trans_modes[2][4]={'I','P',0,0,'E','t','h',0};
|
||||
static char HMI_master_FDD[3][5]={'n','o',0,0,0,'d','o','w','n',0,'u','p',0,0,0};
|
||||
|
||||
void HMI_display_config(void) {
|
||||
unsigned char IP_loc[8];
|
||||
|
||||
HMI_printf("CONFIG:\r\n callsign: '%s'\r\n is_master: %s\r\n MAC: %02X:%02X:%02X:%02X:%02X:%02X\r\n", CONF_radio_my_callsign+2, HMI_yes_no[is_TDMA_master],CONF_modem_MAC[0],CONF_modem_MAC[1],CONF_modem_MAC[2],CONF_modem_MAC[3],CONF_modem_MAC[4],CONF_modem_MAC[5]);
|
||||
HMI_printf(" Eth_mode: %i\r\n", CONF_Eth_mode);
|
||||
HMI_printf(" ext_SRAM: %s\r\n", HMI_yes_no[is_SRAM_ext]);
|
||||
HMI_printf(" frequency: %.3fMHz\r\n freq_shift: %.3fMHz\r\n RF_power: %i\r\n modulation: %i\r\n", ((float)CONF_frequency_HD/1000)+FREQ_RANGE_MIN, (float)CONF_freq_shift/1000, CONF_radio_PA_PWR, CONF_radio_modulation);
|
||||
|
||||
HMI_printf(" radio_netw_ID: %i\r\n radio_on_at_start: %s\r\n", CONF_radio_network_ID, HMI_yes_no[CONF_radio_default_state_ON_OFF]);
|
||||
HMI_printf(" telnet active: %s\r\n telnet routed: %s\r\n", HMI_yes_no[is_telnet_active], HMI_yes_no[is_telnet_routed]);
|
||||
IP_int2char (LAN_conf_saved.LAN_modem_IP, IP_loc);
|
||||
IP_int2char (LAN_conf_saved.LAN_subnet_mask, IP_loc+4);
|
||||
HMI_printf(" modem_IP: %i.%i.%i.%i\r\n netmask: %i.%i.%i.%i\r\n", IP_loc[0], IP_loc[1],IP_loc[2],IP_loc[3],IP_loc[4],IP_loc[5],IP_loc[6],IP_loc[7]);
|
||||
|
||||
if (is_TDMA_master == 1) {
|
||||
HMI_printf(" master_FDD: %s\r\n", HMI_master_FDD[CONF_master_FDD]);
|
||||
}
|
||||
|
||||
|
||||
if ( (is_TDMA_master == 1) && ( CONF_master_FDD < 2 ) && (CONF_transmission_method==0) ) {//Master FDD down (or no FDD)
|
||||
IP_int2char (CONF_radio_IP_start, IP_loc);
|
||||
IP_int2char (CONF_radio_IP_start+CONF_radio_IP_size-1, IP_loc+4);
|
||||
HMI_printf(" IP_begin: %i.%i.%i.%i\r\n master_IP_size: %ld (Last IP: %i.%i.%i.%i)\r\n", IP_loc[0], IP_loc[1],IP_loc[2],IP_loc[3],CONF_radio_IP_size, IP_loc[4],IP_loc[5],IP_loc[6],IP_loc[7]);
|
||||
IP_int2char (LAN_conf_saved.LAN_def_route, IP_loc);
|
||||
HMI_printf(" def_route_active: %s\r\n def_route_val: %i.%i.%i.%i\r\n", HMI_yes_no[LAN_conf_saved.LAN_def_route_activ], IP_loc[0],IP_loc[1],IP_loc[2],IP_loc[3]);
|
||||
IP_int2char (LAN_conf_saved.LAN_DNS_value, IP_loc);
|
||||
HMI_printf(" DNS_active: %s\r\n DNS_value: %i.%i.%i.%i\r\n", HMI_yes_no[LAN_conf_saved.LAN_DNS_activ], IP_loc[0],IP_loc[1],IP_loc[2],IP_loc[3]);
|
||||
}
|
||||
if ( (is_TDMA_master == 1) && (CONF_master_FDD == 2) ) {//Master FDD up
|
||||
IP_int2char (CONF_master_down_IP, IP_loc);
|
||||
HMI_printf(" master_down_IP: %i.%i.%i.%i\r\n",IP_loc[0],IP_loc[1],IP_loc[2],IP_loc[3]);
|
||||
}
|
||||
if (is_TDMA_master == 0) {//client
|
||||
IP_int2char (CONF_radio_IP_start, IP_loc);
|
||||
HMI_printf(" IP_begin: %i.%i.%i.%i\r\n", IP_loc[0], IP_loc[1],IP_loc[2],IP_loc[3]);
|
||||
HMI_printf(" client_req_size: %ld\r\n DHCP_active: %s\r\n", CONF_radio_IP_size_requested, HMI_yes_no[LAN_conf_saved.DHCP_server_active]);
|
||||
}
|
||||
HMI_printf("ready> ");
|
||||
}
|
||||
|
||||
void HMI_display_static(void) {
|
||||
|
||||
}
|
||||
|
||||
void HMI_set_command(char* loc_param1, char* loc_param2) {
|
||||
int temp;
|
||||
unsigned char temp_uchar;
|
||||
unsigned long int temp_uint;
|
||||
float frequency;
|
||||
//unsigned char previous_freq_band;
|
||||
char DHCP_warning[50];
|
||||
if ((loc_param1) && (loc_param2)) {
|
||||
if (strcmp(loc_param1, "callsign") == 0) {
|
||||
RADIO_off_if_necessary(1);
|
||||
strcpy (CONF_radio_my_callsign+2, loc_param2);
|
||||
CONF_radio_my_callsign[0] = CONF_modem_MAC[4];
|
||||
CONF_radio_my_callsign[1] = CONF_modem_MAC[5];
|
||||
CONF_radio_my_callsign[15] = 0;
|
||||
RADIO_restart_if_necessary(1, 0, 1);
|
||||
HMI_printf("new callsign '%s'\r\nready> ", CONF_radio_my_callsign+2);
|
||||
}
|
||||
else if (strcmp(loc_param1, "is_master") == 0) {
|
||||
temp_uchar = HMI_yes_no_2int(loc_param2);
|
||||
if ( (temp_uchar==0) || (temp_uchar==1) ) {
|
||||
RADIO_off_if_necessary(1);
|
||||
is_TDMA_master = temp_uchar;
|
||||
RADIO_restart_if_necessary(1, 0, 1);
|
||||
if ( (is_TDMA_master) && (LAN_conf_saved.DHCP_server_active == 1) ) {
|
||||
strcpy (DHCP_warning, " (warning, DHCP inhibited in master mode)");
|
||||
} else {
|
||||
strcpy (DHCP_warning, "");
|
||||
}
|
||||
HMI_printf("Master '%s'%s\r\nready> ", loc_param2, DHCP_warning);
|
||||
}
|
||||
}
|
||||
else if (strcmp(loc_param1, "telnet_active") == 0) {
|
||||
temp_uchar = HMI_yes_no_2int(loc_param2);
|
||||
if ( (temp_uchar==0) || (temp_uchar==1) ) {
|
||||
if(is_telnet_opened) { HMI_exit(); }
|
||||
is_telnet_active = temp_uchar;
|
||||
HMI_printf("telnet active '%s'\r\nready> ", loc_param2);
|
||||
}
|
||||
}
|
||||
else if (strcmp(loc_param1, "telnet_routed") == 0) {
|
||||
temp_uchar = HMI_yes_no_2int(loc_param2);
|
||||
if ( (temp_uchar==0) || (temp_uchar==1) ) {
|
||||
is_telnet_routed = temp_uchar;
|
||||
//W5500_re_configure_gateway(W5500_p1);
|
||||
HMI_printf("telnet routed '%s'\r\nready> ", loc_param2);
|
||||
}
|
||||
}
|
||||
else if (strcmp(loc_param1, "DNS_active") == 0) {
|
||||
temp_uchar = HMI_yes_no_2int(loc_param2);
|
||||
if ( (temp_uchar==0) || (temp_uchar==1) ) {
|
||||
RADIO_off_if_necessary(1);
|
||||
LAN_conf_saved.LAN_DNS_activ = temp_uchar;
|
||||
RADIO_restart_if_necessary(1, 0, 1);
|
||||
HMI_printf("DNS active '%s'\r\nready> ", loc_param2);
|
||||
}
|
||||
}
|
||||
else if (strcmp(loc_param1, "def_route_active") == 0) {
|
||||
temp_uchar = HMI_yes_no_2int(loc_param2);
|
||||
if ( (temp_uchar==0) || (temp_uchar==1) ) {
|
||||
RADIO_off_if_necessary(1);
|
||||
LAN_conf_saved.LAN_def_route_activ = temp_uchar;
|
||||
//W5500_re_configure_gateway(W5500_p1);
|
||||
RADIO_restart_if_necessary(1, 0, 1);
|
||||
HMI_printf("default route active '%s'\r\nready> ", loc_param2);
|
||||
}
|
||||
}
|
||||
else if (strcmp(loc_param1, "master_FDD") == 0) {
|
||||
if(strcmp(loc_param2,"no") == 0) {
|
||||
CONF_master_FDD = 0;
|
||||
RADIO_off_if_necessary(1);
|
||||
RADIO_restart_if_necessary(1, 0, 1);
|
||||
}
|
||||
else if(strcmp(loc_param2,"down") == 0) {
|
||||
CONF_master_FDD = 1;
|
||||
RADIO_off_if_necessary(1);
|
||||
RADIO_restart_if_necessary(1, 0, 1);
|
||||
}
|
||||
else if(strcmp(loc_param2,"up") == 0) {
|
||||
CONF_master_FDD = 2;
|
||||
RADIO_off_if_necessary(1);
|
||||
RADIO_restart_if_necessary(1, 0, 1);
|
||||
}
|
||||
else {
|
||||
HMI_printf(" wrong value\r\n");
|
||||
}
|
||||
HMI_printf("ready> ");
|
||||
}
|
||||
//else if (strcmp(loc_param1, "trans_method") == 0) {
|
||||
// if(strcmp(loc_param2,"IP") == 0) {
|
||||
// CONF_transmission_method = 0;
|
||||
// RADIO_off_if_necessary(1);
|
||||
// RADIO_restart_if_necessary(1, 0, 1);
|
||||
// }
|
||||
// else if(strcmp(loc_param2,"Eth") == 0) {
|
||||
// CONF_transmission_method = 1;
|
||||
// RADIO_off_if_necessary(1);
|
||||
// RADIO_restart_if_necessary(1, 0, 1);
|
||||
// }
|
||||
// else {
|
||||
// HMI_printf(" wrong value\r\n");
|
||||
// }
|
||||
// HMI_printf("ready> ");
|
||||
//}
|
||||
//else if (strcmp(loc_param1, "client_static_IP") == 0) {
|
||||
// temp_uchar = HMI_yes_no_2int(loc_param2);
|
||||
// if ( (temp_uchar==0) || (temp_uchar==1) ) {
|
||||
// RADIO_off_if_necessary(1);
|
||||
// CONF_radio_static_IP_requested = temp_uchar;
|
||||
// HMI_printf("client static IP '%s'\r\nready> ", loc_param2);
|
||||
// RADIO_restart_if_necessary(1, 0, 1);
|
||||
// }
|
||||
//}
|
||||
else if (strcmp(loc_param1, "radio_on_at_start") == 0) {
|
||||
temp_uchar = HMI_yes_no_2int(loc_param2);
|
||||
if ( (temp_uchar==0) || (temp_uchar==1) ) {
|
||||
CONF_radio_default_state_ON_OFF = temp_uchar;
|
||||
HMI_printf("radio_on_at_start '%s'\r\nready> ", loc_param2);
|
||||
}
|
||||
}
|
||||
else if (strcmp(loc_param1, "DHCP_active") == 0) {
|
||||
temp_uchar = HMI_yes_no_2int(loc_param2);
|
||||
if ( (temp_uchar==0) || (temp_uchar==1) ) {
|
||||
LAN_conf_saved.DHCP_server_active = temp_uchar;
|
||||
if ( (is_TDMA_master) && (LAN_conf_saved.DHCP_server_active == 1) ) {
|
||||
strcpy (DHCP_warning, " (warning, DHCP inhibited in master mode)");
|
||||
} else {
|
||||
strcpy (DHCP_warning, "");
|
||||
}
|
||||
HMI_printf("DHCP_active: '%s'%s\r\nready> ", loc_param2, DHCP_warning);
|
||||
}
|
||||
}
|
||||
else if (strcmp(loc_param1, "modem_IP") == 0) {
|
||||
temp_uint = HMI_str2IP(loc_param2);
|
||||
if (temp_uint !=0) {
|
||||
RADIO_off_if_necessary(1);
|
||||
LAN_conf_saved.LAN_modem_IP = temp_uint;
|
||||
//HMI_force_exit();
|
||||
//W5500_re_configure();
|
||||
RADIO_restart_if_necessary(1, 0, 1);
|
||||
}
|
||||
}
|
||||
else if (strcmp(loc_param1, "netmask") == 0) {
|
||||
temp_uint = HMI_str2IP(loc_param2);
|
||||
if (temp_uint !=0) {
|
||||
RADIO_off_if_necessary(1);
|
||||
LAN_conf_saved.LAN_subnet_mask = temp_uint;
|
||||
//HMI_force_exit();
|
||||
//W5500_re_configure();
|
||||
RADIO_restart_if_necessary(1, 0, 1);
|
||||
}
|
||||
}
|
||||
else if (strcmp(loc_param1, "def_route_val") == 0) {
|
||||
temp_uint = HMI_str2IP(loc_param2);
|
||||
if (temp_uint !=0) {
|
||||
RADIO_off_if_necessary(1);
|
||||
LAN_conf_saved.LAN_def_route = temp_uint;
|
||||
//W5500_re_configure_gateway(W5500_p1);
|
||||
RADIO_restart_if_necessary(1, 0, 1);
|
||||
}
|
||||
}
|
||||
else if (strcmp(loc_param1, "DNS_value") == 0) {
|
||||
temp_uint = HMI_str2IP(loc_param2);
|
||||
if (temp_uint !=0) {
|
||||
RADIO_off_if_necessary(1);
|
||||
LAN_conf_saved.LAN_DNS_value = temp_uint;
|
||||
RADIO_restart_if_necessary(1, 0, 1);
|
||||
}
|
||||
}
|
||||
else if (strcmp(loc_param1, "IP_begin") == 0) {
|
||||
temp_uint = HMI_str2IP(loc_param2);
|
||||
if (temp_uint !=0) {
|
||||
RADIO_off_if_necessary(1);
|
||||
CONF_radio_IP_start = temp_uint;
|
||||
RADIO_restart_if_necessary(1, 0, 1);
|
||||
}
|
||||
}
|
||||
else if (strcmp(loc_param1, "master_down_IP") == 0) {
|
||||
temp_uint = HMI_str2IP(loc_param2);
|
||||
if (temp_uint !=0) {
|
||||
RADIO_off_if_necessary(1);
|
||||
CONF_master_down_IP = temp_uint;
|
||||
RADIO_restart_if_necessary(1, 0, 1);
|
||||
}
|
||||
}
|
||||
else if (strcmp(loc_param1, "master_IP_size") == 0) {
|
||||
temp = sscanf (loc_param2, "%ld", &temp_uint);
|
||||
if ( (temp==1) && (temp_uint!=0) ) {
|
||||
RADIO_off_if_necessary(1);
|
||||
CONF_radio_IP_size = temp_uint;
|
||||
RADIO_restart_if_necessary(1, 0, 1);
|
||||
HMI_printf("OK\r\nready> ");
|
||||
}
|
||||
else {
|
||||
HMI_printf("wrong value\r\nready> ");
|
||||
}
|
||||
}
|
||||
else if (strcmp(loc_param1, "client_req_size") == 0) {
|
||||
temp = sscanf (loc_param2, "%ld", &temp_uint);
|
||||
if ( (temp==1) && (temp_uint!=0) ) {
|
||||
RADIO_off_if_necessary(1);
|
||||
CONF_radio_IP_size_requested = temp_uint;
|
||||
RADIO_restart_if_necessary(1, 0, 1);
|
||||
HMI_printf("OK\r\nready> ");
|
||||
}
|
||||
else {
|
||||
HMI_printf("wrong value\r\nready> ");
|
||||
}
|
||||
}
|
||||
|
||||
else if (strcmp(loc_param1, "frequency") == 0) {
|
||||
temp = sscanf (loc_param2, "%f", &frequency);
|
||||
if ( (temp == 1) && (frequency<=FREQ_RANGE_MAX) && (frequency>FREQ_RANGE_MIN) ) {
|
||||
RADIO_off_if_necessary(0);
|
||||
frequency = (frequency - FREQ_RANGE_MIN)*1000 + 0.3;
|
||||
CONF_frequency_HD = (short int)frequency;
|
||||
//RADIO_compute_freq_params();//REMOVE TEST
|
||||
RADIO_restart_if_necessary(0, 1, 1);
|
||||
HMI_printf("OK\r\nready> ");
|
||||
} else {
|
||||
HMI_printf("wrong freq value\r\nready> ");
|
||||
}
|
||||
}
|
||||
else if (strcmp(loc_param1, "freq_shift") == 0) {
|
||||
temp = sscanf (loc_param2, "%f", &frequency);
|
||||
if ( (temp == 1) && (frequency<=10) && (frequency>=-10) ) {
|
||||
RADIO_off_if_necessary(0);
|
||||
frequency = (frequency*1000);
|
||||
CONF_freq_shift = (short int)frequency;
|
||||
//RADIO_compute_freq_params();//REMOVE TEST
|
||||
//if (CONF_frequency_band == previous_freq_band) {
|
||||
// RADIO_restart_if_necessary(0, 0, 1);
|
||||
//}else {
|
||||
RADIO_restart_if_necessary(0, 1, 1);
|
||||
//}
|
||||
HMI_printf("OK\r\nready> ");
|
||||
} else {
|
||||
HMI_printf("wrong freq value\r\nready> ");
|
||||
}
|
||||
}
|
||||
else if (strcmp(loc_param1, "RF_power") == 0) {
|
||||
temp_uint = sscanf (loc_param2, "%i", &temp);
|
||||
if ( (temp_uint == 1) && (temp<128) ) {
|
||||
RADIO_off_if_necessary(0);
|
||||
CONF_radio_PA_PWR = temp;
|
||||
SI4463_set_power(G_SI4463);
|
||||
RADIO_restart_if_necessary(0, 0, 1);
|
||||
HMI_printf("OK\r\nready> ");
|
||||
} else {
|
||||
HMI_printf("error : max RF_power value 127\r\nready> ");
|
||||
}
|
||||
}
|
||||
else if (strcmp(loc_param1, "Eth_mode") == 0) {
|
||||
temp_uint = sscanf (loc_param2, "%i", &temp);
|
||||
if ( (temp_uint == 1) && (temp <= 7) ) {
|
||||
CONF_Eth_mode = temp;
|
||||
HMI_printf("OK\r\nready> ");
|
||||
} else {
|
||||
HMI_printf("error : max Eth_mode value 7\r\nready> ");
|
||||
}
|
||||
}
|
||||
else if (strcmp(loc_param1, "modulation") == 0) {
|
||||
temp_uint = sscanf (loc_param2, "%i", &temp);
|
||||
temp_uchar = temp;
|
||||
//if ( (temp_uint == 1) && ((temp_uchar==13)||(temp_uchar==14)||(temp_uchar==22)||(temp_uchar==23)||(temp_uchar==24)) ) {
|
||||
if ( (temp_uint == 1) && ( ((temp_uchar>=11)&&(temp_uchar<=14)) || ((temp_uchar>=20)&&(temp_uchar<=24)) ) ) {
|
||||
RADIO_off_if_necessary(1);
|
||||
CONF_radio_modulation = temp_uchar;
|
||||
RADIO_restart_if_necessary(1, 1, 1);
|
||||
HMI_printf("OK\r\nready> ");
|
||||
} else {
|
||||
HMI_printf("wrong modulation value\r\nready> ");
|
||||
}
|
||||
}
|
||||
else if (strcmp(loc_param1, "radio_netw_ID") == 0) {
|
||||
temp_uint = sscanf (loc_param2, "%i", &temp);
|
||||
temp_uchar = temp;
|
||||
if ( (temp_uint == 1) && (temp_uchar <= 15) ) {
|
||||
RADIO_off_if_necessary(1);
|
||||
CONF_radio_network_ID = temp_uchar;
|
||||
RADIO_restart_if_necessary(1, 1, 1);
|
||||
HMI_printf("OK\r\nready> ");
|
||||
} else {
|
||||
HMI_printf("wrong value, 15 max\r\nready> ");
|
||||
}
|
||||
}
|
||||
else {
|
||||
HMI_printf("unknown config param\r\nready> ");
|
||||
}
|
||||
} else {
|
||||
HMI_printf("set command requires 2 param\r\nready> ");
|
||||
}
|
||||
}
|
||||
|
||||
unsigned long int HMI_str2IP(char* raw_string) {
|
||||
unsigned int IP_char_t[6];
|
||||
unsigned char IP_char[6];
|
||||
unsigned long int answer;
|
||||
int i;
|
||||
answer = sscanf(raw_string, "%i.%i.%i.%i", IP_char_t, IP_char_t+1, IP_char_t+2, IP_char_t+3);
|
||||
for (i=0;i<4; i++) {
|
||||
IP_char[i] = IP_char_t[i];
|
||||
}
|
||||
if (answer == 4) {
|
||||
answer = IP_char2int(IP_char);
|
||||
HMI_printf("OK\r\nready> ");
|
||||
} else {
|
||||
HMI_printf("bad IP format\r\nready> ");
|
||||
answer = 0;
|
||||
}
|
||||
return answer;
|
||||
}
|
||||
|
||||
unsigned char HMI_yes_no_2int(char* raw_string) {
|
||||
unsigned char answer;
|
||||
if (strcmp (raw_string, "yes") == 0) {
|
||||
answer = 1;
|
||||
}
|
||||
else if (strcmp (raw_string, "no") == 0) {
|
||||
answer = 0;
|
||||
}
|
||||
else {
|
||||
HMI_printf("value must be 'yes' or 'no'\r\nready> ");
|
||||
answer = -1;
|
||||
}
|
||||
return answer;
|
||||
}
|
||||
|
||||
void HMI_print_who(void) {
|
||||
int i;
|
||||
unsigned int loc_age;
|
||||
unsigned int timer_snapshot;
|
||||
unsigned long int last_IP;
|
||||
unsigned char IP_c[6];
|
||||
char temp_string[50] = {0x1B,0x5B,0x41,0x1B,0x5B,0x41,0x1B,0x5B,0x41,0x1B, 0x5B, 0x41,0x1B, 0x5B, 0x41,0x1B, 0x5B, 0x41,0x1B, 0x5B, 0x41,0x1B, 0x5B, 0x41,0x1B, 0x5B, 0x41,0x1B, 0x5B, 0x41,0x1B, 0x5B, 0x41,0x00};
|
||||
|
||||
if (slow_counter == 0) { temp_string[0] = 0; }
|
||||
HMI_printf ("%s%i Master: ID:127 Callsign:%s\r\n", temp_string, slow_counter, CONF_radio_master_callsign+2);
|
||||
IP_int2char (LAN_conf_applied.LAN_modem_IP, IP_c);
|
||||
HMI_printf ("ME: Callsign:%s ID:%i modem IP:%i.%i.%i.%i\r\n", CONF_radio_my_callsign+2, my_radio_client_ID, IP_c[0], IP_c[1], IP_c[2], IP_c[3]);
|
||||
HMI_printf ("Clients:\r\n");
|
||||
timer_snapshot = GLOBAL_timer.read_us();
|
||||
for (i=0; i<radio_addr_table_size; i++) {
|
||||
|
||||
}
|
||||
for (i=0; i<radio_addr_table_size; i++) {
|
||||
loc_age = timer_snapshot - CONF_radio_addr_table_date[i];
|
||||
loc_age = loc_age / 1000000;
|
||||
if (is_TDMA_master) {loc_age = 0;} // master : already timeout in state machine
|
||||
//printf ("age:%i ", loc_age);
|
||||
if ( (CONF_radio_addr_table_status[i]) && (loc_age < connexion_timeout) ) {
|
||||
HMI_printf (" ID:%i Callsign:%s ", i, CONF_radio_addr_table_callsign[i]+2);
|
||||
IP_int2char (CONF_radio_addr_table_IP_begin[i], IP_c);
|
||||
HMI_printf ("IP start:%i.%i.%i.%i ", IP_c[0], IP_c[1], IP_c[2], IP_c[3]);
|
||||
last_IP = CONF_radio_addr_table_IP_begin[i] + CONF_radio_addr_table_IP_size[i] - 1;
|
||||
IP_int2char (last_IP, IP_c);
|
||||
HMI_printf ("IP end:%i.%i.%i.%i\r\n", IP_c[0], IP_c[1], IP_c[2], IP_c[3]);
|
||||
} else {
|
||||
HMI_printf (" \r\n");
|
||||
}
|
||||
|
||||
}
|
||||
HMI_printf("CTRL+c to exit...\r\n");
|
||||
}
|
||||
|
||||
void HMI_print_status(void) {
|
||||
static char text_radio_status[3][22] = {
|
||||
"waiting connection",
|
||||
"connected",
|
||||
"connection rejected"
|
||||
};
|
||||
static char text_reject_reason[2][15] = {
|
||||
"IP requested",
|
||||
"clients",
|
||||
};
|
||||
char temp_string[22];
|
||||
float loc_downlink_bw;
|
||||
float loc_uplink_bw;
|
||||
int TA_loc;
|
||||
temp_string[0]=0x1B;
|
||||
temp_string[1]=0x5B;
|
||||
temp_string[2]=0x41;
|
||||
temp_string[3]=0x1B;
|
||||
temp_string[4]=0x5B;
|
||||
temp_string[5]=0x41;
|
||||
temp_string[6]=0x1B;
|
||||
temp_string[7]=0x5B;
|
||||
temp_string[8]=0x41;
|
||||
temp_string[9]=0x1B;
|
||||
temp_string[10]=0x5B;
|
||||
temp_string[11]=0x41;
|
||||
temp_string[12]=0x1B;
|
||||
temp_string[13]=0x5B;
|
||||
temp_string[14]=0x41;
|
||||
temp_string[15]=0x00;
|
||||
//temp_string[15]=0x1B;
|
||||
//temp_string[16]=0x5B;
|
||||
//temp_string[17]=0x41;
|
||||
//temp_string[18]=0x00;
|
||||
if (slow_counter == 0) { temp_string[0] = 0; }
|
||||
if (is_TDMA_master) {
|
||||
loc_downlink_bw = G_uplink_bandwidth_temp * 0.004;
|
||||
loc_uplink_bw = G_downlink_bandwidth_temp * 0.004;
|
||||
TA_loc = 0;
|
||||
} else {
|
||||
loc_downlink_bw = G_downlink_bandwidth_temp * 0.004;
|
||||
loc_uplink_bw = G_uplink_bandwidth_temp * 0.004;
|
||||
TA_loc = TDMA_table_TA[my_radio_client_ID];
|
||||
}
|
||||
if (CONF_radio_state_ON_OFF == 0) {
|
||||
HMI_printf("%s %i status: radio OFF \r\n", temp_string, slow_counter);
|
||||
}
|
||||
else if (my_client_radio_connexion_state == 0x03) {
|
||||
HMI_printf("%s %i status: rejected because too many %s \r\n", temp_string, slow_counter, text_reject_reason[G_connect_rejection_reason-2]);
|
||||
} else {
|
||||
HMI_printf("%s %i status: %s TA:%.1fkm Temp:%idegC \r\n", temp_string, slow_counter, text_radio_status[my_client_radio_connexion_state-1], 0.15*(float)TA_loc, G_temperature_SI4463);
|
||||
}
|
||||
//HMI_printf(" TX buff filling %i\r\n", (TX_buff_ext_WR_pointer - TX_buff_ext_RD_pointer)*128);//!!!test
|
||||
if ( (is_TDMA_master == 1) && (CONF_master_FDD == 2) ) {
|
||||
HMI_printf(" RX tops from master FDD down %i\r\n", RX_top_FDD_up_counter);
|
||||
} else {
|
||||
HMI_printf(" RX_Eth_IPv4 %i ;TX_radio_IPv4 %i ; RX_radio_IPv4 %i \r\n", RX_Eth_IPv4_counter, TX_radio_IPv4_counter, RX_radio_IPv4_counter);
|
||||
//HMI_printf(" RX_Eth_IPv4 %i ;TX_radio_IPv4 %i ; RX_radio_IPv4 %i \r\n", RX_Eth_IPv4_counter, TX_radio_IPv4_counter, (TX_buff_ext_WR_pointer - TX_buff_ext_RD_pointer)*128);//!!!! debug FIFO filling
|
||||
}
|
||||
if ( (is_TDMA_master == 0) && (RSSI_stat_pkt_nb > 0) ) {
|
||||
//HMI_printf("RSSI: %i\r\nCTRL+c to exit...\r\n", (RSSI_total_stat / RSSI_stat_pkt_nb) );
|
||||
HMI_printf(" DOWNLINK - bandwidth:%.1f RSSI:%.1f ERR:%.2f%% \r\n", loc_downlink_bw, ((float)G_downlink_RSSI/256/2-136), ((float)G_downlink_BER)/500); // /500
|
||||
RSSI_total_stat = 0;
|
||||
RSSI_stat_pkt_nb = 0;
|
||||
} else {
|
||||
HMI_printf(" DOWNLINK - bandwidth: %.1f RSSI: ERR: \r\n", loc_downlink_bw);
|
||||
|
||||
}
|
||||
if ( (is_TDMA_master == 0) && (my_client_radio_connexion_state == 2) ) {
|
||||
HMI_printf(" UPLINK - bandwidth:%.1f RSSI:%.1f ERR:%.2f%% \r\nCTRL+c to exit...\r\n", loc_uplink_bw, ((float)G_radio_addr_table_RSSI[my_radio_client_ID]/2-136), ((float)G_radio_addr_table_BER[my_radio_client_ID])/500);
|
||||
} else {
|
||||
HMI_printf(" UPLINK - bandwidth:%.1f RSSI: ERR: \r\nCTRL+c to exit...\r\n", loc_uplink_bw);
|
||||
}
|
||||
G_downlink_bandwidth_temp = 0;
|
||||
G_uplink_bandwidth_temp = 0;
|
||||
}
|
||||
|
||||
void HMI_periodic_call (void) {
|
||||
if (display_status_ongoing) {
|
||||
HMI_print_status();
|
||||
slow_counter++;
|
||||
}
|
||||
if (display_who_ongoing) {
|
||||
HMI_print_who();
|
||||
slow_counter++;
|
||||
}
|
||||
}
|
||||
|
||||
void HMI_printf_detail (void) {
|
||||
int size;
|
||||
if (is_telnet_opened) {
|
||||
size = strlen (HMI_out_str);
|
||||
W5500_write_TX_buffer (W5500_p1, 1, (unsigned char*)HMI_out_str, size, 0);
|
||||
}
|
||||
else {
|
||||
printf("%s", HMI_out_str);
|
||||
fflush(stdout);
|
||||
}
|
||||
}
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
// This file is part of "NPR70 modem firmware" software
|
||||
// (A GMSK data modem for ham radio 430-440MHz, at several hundreds of kbps)
|
||||
// Copyright (c) 2017-2020 Guillaume F. F4HDK (amateur radio callsign)
|
||||
//
|
||||
// "NPR70 modem firmware" is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// "NPR70 modem firmware" is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with "NPR70 modem firmware". If not, see <http://www.gnu.org/licenses/>
|
||||
|
||||
#ifndef TELNET_F4
|
||||
#define TELNET_F4
|
||||
|
||||
#include "mbed.h"
|
||||
#include "W5500.h"
|
||||
#include "global_variables.h"
|
||||
|
||||
#define HMI_printf(param, ...) sprintf (HMI_out_str, param, ##__VA_ARGS__);\
|
||||
HMI_printf_detail();
|
||||
|
||||
int telnet_loop(W5500_chip* W5500);
|
||||
|
||||
int serial_term_loop (void);
|
||||
|
||||
void HMI_line_parse (char* RX_text, int RX_text_count);
|
||||
|
||||
void HMI_cancel_current(void);
|
||||
|
||||
|
||||
|
||||
int HMI_check_radio_OFF(void);
|
||||
|
||||
void HMI_TX_test(char* duration_txt);
|
||||
|
||||
void HMI_reboot(void);
|
||||
|
||||
void HMI_force_exit(void);
|
||||
|
||||
void HMI_exit(void);
|
||||
|
||||
void HMI_display_config(void);
|
||||
|
||||
void HMI_display_static(void);
|
||||
|
||||
void HMI_set_command(char* loc_param1, char* loc_param2);
|
||||
|
||||
unsigned long int HMI_str2IP(char* raw_string);
|
||||
|
||||
unsigned char HMI_yes_no_2int(char* raw_string);
|
||||
|
||||
void HMI_print_who(void);
|
||||
|
||||
void HMI_periodic_call(void);
|
||||
|
||||
void HMI_printf_detail (void);
|
||||
|
||||
#endif
|
||||
+759
@@ -0,0 +1,759 @@
|
||||
// This file is part of "NPR70 modem firmware" software
|
||||
// (A GMSK data modem for ham radio 430-440MHz, at several hundreds of kbps)
|
||||
// Copyright (c) 2017-2020 Guillaume F. F4HDK (amateur radio callsign)
|
||||
//
|
||||
// "NPR70 modem firmware" is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// "NPR70 modem firmware" is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with "NPR70 modem firmware". If not, see <http://www.gnu.org/licenses/>
|
||||
|
||||
#include "L1L2_radio.h"
|
||||
#include "mbed.h"
|
||||
#include "global_variables.h"
|
||||
#include "W5500.h"
|
||||
#include "SI4463.h"
|
||||
#include "Eth_IPv4.h"
|
||||
#include "TDMA.h"
|
||||
#include "signaling.h"
|
||||
|
||||
#include "ext_SRAM2.h"
|
||||
|
||||
//Timeout SI4463_prepa_TX_1_call;
|
||||
|
||||
static unsigned char trash[130];
|
||||
|
||||
static unsigned char data_RX[360];//260
|
||||
static unsigned char rframe_TX[384];
|
||||
|
||||
void FDDup_RX_FIFO_dequeue(void) {
|
||||
int rframe_lgth, i;
|
||||
unsigned char data_temp;
|
||||
unsigned long int timer_snapshot;
|
||||
i = 0;
|
||||
if (RX_FIFO_last_received > RX_FIFO_RD_point) {
|
||||
for (i=0; i<=3; i++) {//4 bytes for timer and RSSI
|
||||
data_RX[i] = RX_FIFO_data[RX_FIFO_RD_point & RX_FIFO_mask];
|
||||
RX_FIFO_RD_point++;
|
||||
}
|
||||
data_temp = RX_FIFO_data[RX_FIFO_RD_point & RX_FIFO_mask];
|
||||
RX_FIFO_RD_point++;
|
||||
rframe_lgth = data_temp + SI4463_offset_size;
|
||||
data_RX[4] = data_temp;
|
||||
|
||||
for (i=0; i<rframe_lgth; i++) {
|
||||
data_RX[i+5] = RX_FIFO_data[RX_FIFO_RD_point & RX_FIFO_mask];
|
||||
RX_FIFO_RD_point++;
|
||||
}
|
||||
W5500_write_TX_buffer(W5500_p1, 4, data_RX, rframe_lgth+5, 0);
|
||||
timer_snapshot = GLOBAL_timer.read_us();
|
||||
last_rframe_seen = timer_snapshot;
|
||||
//debug_counter++;
|
||||
}
|
||||
}
|
||||
|
||||
void FDDdown_RX_pckt_treat(unsigned char* in_data, int size) {
|
||||
//puts raw RX radio packet from Ethernet to RX buffer
|
||||
memcpy (RX_FIFO_data, in_data, size+4);
|
||||
RX_FIFO_RD_point = 0;
|
||||
RX_FIFO_last_received = size;
|
||||
radio_RX_FIFO_dequeue(W5500_p1);
|
||||
//debug_counter++;
|
||||
}
|
||||
|
||||
//static int RX_FRAME_count_debug = 0;
|
||||
|
||||
void radio_RX_FIFO_dequeue (W5500_chip* W5500) {
|
||||
static unsigned char ethernet_buffer[radio_addr_table_size][1600];
|
||||
static int size_received[radio_addr_table_size];
|
||||
static unsigned char prev_seg_counter[radio_addr_table_size];
|
||||
static unsigned char curr_pkt_counter[radio_addr_table_size];
|
||||
|
||||
unsigned char seg_counter;
|
||||
unsigned char pkt_counter;
|
||||
unsigned char is_last_seg;
|
||||
unsigned char client_addr;
|
||||
unsigned char LID;
|
||||
unsigned char protocol;
|
||||
unsigned char protocol_byte;
|
||||
unsigned char client_ID_byte;
|
||||
unsigned char segmenter_byte;
|
||||
//static unsigned char data_RX[260];
|
||||
int TA_local = 100000;
|
||||
int RSSI;
|
||||
int rframe_lgth;
|
||||
int size_w_FEC;
|
||||
int size_wo_FEC;
|
||||
int segment_size;
|
||||
int client_ID_filter;
|
||||
unsigned int loc_micro_BER;
|
||||
unsigned int frame_timer;
|
||||
static int rx_count = 0;
|
||||
unsigned char TDMA_byte;
|
||||
unsigned char is_downlink;
|
||||
unsigned long int timer_snapshot;
|
||||
//int i;
|
||||
|
||||
if (RX_FIFO_last_received > RX_FIFO_RD_point) { //something new in RX FIFO
|
||||
timer_snapshot = GLOBAL_timer.read_us();
|
||||
//printf ("something in RX FIFO\r\n");
|
||||
//RX_FRAME_count_debug++;
|
||||
//printf("%i RX:", RX_FRAME_count_debug);
|
||||
//for (i=4; i<10; i++){
|
||||
// printf("%02X.",RX_FIFO_data[(RX_FIFO_RD_point+i) & RX_FIFO_mask]);
|
||||
//}
|
||||
//printf("\r\n");
|
||||
frame_timer = RX_FIFO_data[RX_FIFO_RD_point & RX_FIFO_mask];
|
||||
RX_FIFO_RD_point++;
|
||||
frame_timer = (0x100 * RX_FIFO_data[RX_FIFO_RD_point & RX_FIFO_mask]) + frame_timer;
|
||||
RX_FIFO_RD_point++;
|
||||
frame_timer = (0x10000 * RX_FIFO_data[RX_FIFO_RD_point & RX_FIFO_mask]) + frame_timer;
|
||||
RX_FIFO_RD_point++;
|
||||
RSSI = RX_FIFO_data[RX_FIFO_RD_point & RX_FIFO_mask];
|
||||
RX_FIFO_RD_point++;
|
||||
rframe_lgth = RX_FIFO_data[RX_FIFO_RD_point & RX_FIFO_mask] + SI4463_offset_size;
|
||||
RX_FIFO_RD_point++;
|
||||
if (rframe_lgth > SI4463_CONF_max_field2_size) {
|
||||
rframe_lgth = SI4463_CONF_max_field2_size;
|
||||
}
|
||||
TDMA_byte = RX_FIFO_data[RX_FIFO_RD_point & RX_FIFO_mask];
|
||||
is_downlink = TDMA_byte & 0x40;
|
||||
RX_FIFO_RD_point++;
|
||||
client_ID_byte = RX_FIFO_data[ (RX_FIFO_RD_point ) & RX_FIFO_mask]; // +1
|
||||
protocol_byte = RX_FIFO_data[ (RX_FIFO_RD_point + 1) & RX_FIFO_mask]; // +2
|
||||
|
||||
size_w_FEC = rframe_lgth - 1;
|
||||
|
||||
if (is_TDMA_master) {
|
||||
TA_local = TDMA_TA_measure_single_frame(frame_timer, TDMA_byte, client_ID_byte, size_w_FEC);
|
||||
if ( (timer_snapshot-last_rframe_seen) > (CONF_radio_timeout+1000000) ) {
|
||||
last_rframe_seen = timer_snapshot;
|
||||
wait_ms(20);//lets time for client to switch to RX
|
||||
SI4463_prepa_TX_1();
|
||||
}
|
||||
}
|
||||
last_rframe_seen = timer_snapshot;
|
||||
|
||||
// WITH FEC
|
||||
size_wo_FEC = FEC_decode(data_RX, size_w_FEC, &loc_micro_BER);
|
||||
//if (loc_micro_BER>0) {printf("err micro%i\r\n", loc_micro_BER);}
|
||||
radio_save_RSSI_BER (client_ID_byte, is_downlink, RSSI, loc_micro_BER);
|
||||
//printf("RSSI:%i BER:%i\r\n", RSSI, loc_micro_BER);
|
||||
protocol = 0;
|
||||
if ( size_wo_FEC > 0) {
|
||||
client_addr = data_RX[0] & 0x7F; //inside FEC, non need to use parity bit
|
||||
if (is_TDMA_master) {
|
||||
LID = client_addr; //client_addr;
|
||||
} else {
|
||||
LID = 0;//only one RX buffer for clients
|
||||
}
|
||||
protocol = data_RX[1];
|
||||
// client ID filter
|
||||
client_ID_filter = 0;
|
||||
if (is_TDMA_master) {
|
||||
if ( (is_downlink == 0) && (client_addr < radio_addr_table_size) ) {
|
||||
if (CONF_radio_addr_table_status[client_addr]) {
|
||||
client_ID_filter = 1;
|
||||
}
|
||||
}
|
||||
if ( (is_downlink == 0) && (client_addr == 0x7E) ) {
|
||||
client_ID_filter = 1;
|
||||
}
|
||||
}
|
||||
else if ( ( (client_addr == my_radio_client_ID) || (client_addr == 0x7F) ) && (is_downlink) ) {
|
||||
client_ID_filter = 1;
|
||||
}
|
||||
if (client_ID_filter) {
|
||||
/*
|
||||
if ( (protocol == 0x01) && (LID < radio_addr_table_size) ) { //RAW ETHERNET
|
||||
segment_size = size_wo_FEC - 3;
|
||||
segmenter_byte = data_RX[2];
|
||||
pkt_counter = (segmenter_byte & 0xF0) / 0x10;
|
||||
is_last_seg = segmenter_byte & 0x08;
|
||||
seg_counter = segmenter_byte & 0x07;
|
||||
//printf("RX seg:%02X\r\n", segmenter_byte);
|
||||
|
||||
if (seg_counter == 0) {//beginning of a new pkt
|
||||
curr_pkt_counter[LID] = pkt_counter;
|
||||
memcpy (ethernet_buffer[LID], data_RX+3, segment_size);
|
||||
size_received[LID] = segment_size;
|
||||
//printf("1st seg\r\n");
|
||||
}
|
||||
else if ( (seg_counter == (prev_seg_counter[LID] + 1)) && (pkt_counter == curr_pkt_counter[LID]) ) {
|
||||
//folowing segment
|
||||
memcpy ( (ethernet_buffer[LID]+size_received[LID]), data_RX+3, segment_size);
|
||||
size_received[LID] = size_received[LID] + segment_size;
|
||||
//printf("follow seg\r\n");
|
||||
}
|
||||
else { //continuity error
|
||||
size_received[LID] = 0;
|
||||
}
|
||||
prev_seg_counter[LID] = seg_counter;
|
||||
|
||||
if ( (is_last_seg == 0x08) && (size_received[LID] > 0) ) {
|
||||
// Raw Ethernet... Not implemented yet
|
||||
}
|
||||
} */
|
||||
if ( (protocol == 0x02) && (LID < radio_addr_table_size) ) { //IPv4 Access 0x02
|
||||
//printf("IPv4 fr received\r\n");
|
||||
segment_size = size_wo_FEC - 3;
|
||||
segmenter_byte = data_RX[2];
|
||||
pkt_counter = (segmenter_byte & 0xF0) / 0x10;
|
||||
is_last_seg = segmenter_byte & 0x08;
|
||||
seg_counter = segmenter_byte & 0x07;
|
||||
//printf("RX seg:%02X\r\n", segmenter_byte);
|
||||
|
||||
if (seg_counter == 0) {//beginning of a new pkt
|
||||
curr_pkt_counter[LID] = pkt_counter;
|
||||
memcpy (ethernet_buffer[LID] + 14, data_RX+3, segment_size);
|
||||
size_received[LID] = segment_size;
|
||||
//printf("1st seg\r\n");
|
||||
}
|
||||
else if ( (seg_counter == (prev_seg_counter[LID] + 1)) && (pkt_counter == curr_pkt_counter[LID]) ) {
|
||||
//folowing segment
|
||||
memcpy ( (ethernet_buffer[LID] + size_received[LID] +14), data_RX+3, segment_size);
|
||||
size_received[LID] = size_received[LID] + segment_size;
|
||||
//printf("follow seg\r\n");
|
||||
}
|
||||
else { //continuity error
|
||||
size_received[LID] = 0;
|
||||
}
|
||||
prev_seg_counter[LID] = seg_counter;
|
||||
|
||||
if ( (is_last_seg == 0x08) && (size_received[LID] > 0) ) {
|
||||
IPv4_from_radio (ethernet_buffer[LID], size_received[LID] + 14);
|
||||
G_downlink_bandwidth_temp = G_downlink_bandwidth_temp + size_received[LID];
|
||||
RX_radio_IPv4_counter++;
|
||||
//printf("pkt full\r\n");
|
||||
}
|
||||
}
|
||||
else if (protocol == 0x1E) {
|
||||
//printf("sig fr received\r\n");
|
||||
signaling_frame_exploitation (data_RX, size_wo_FEC, TA_local);
|
||||
}
|
||||
else if ( (protocol == 0x1F) && (is_TDMA_master == 0) ) {
|
||||
TDMA_slave_alloc_exploitation (data_RX, size_wo_FEC);
|
||||
}
|
||||
else if (protocol == 0x00) {
|
||||
|
||||
}
|
||||
else {
|
||||
if (super_debug) {
|
||||
printf("ERR Protocol\r\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (super_debug) {
|
||||
printf("FEC error\r\n");
|
||||
}
|
||||
}
|
||||
TDMA_byte_RX_interp (TDMA_byte, client_ID_byte, protocol_byte, frame_timer);
|
||||
rx_count++;
|
||||
}
|
||||
}
|
||||
|
||||
void radio_signalisation_frame_building(void) {
|
||||
|
||||
}
|
||||
|
||||
int FEC_encode2 (unsigned char* data_in, unsigned char* data_out, int size_in) {
|
||||
int size_out;
|
||||
int size_single_bloc;
|
||||
int size_single_bloc_pl1;
|
||||
unsigned char CRC_1;
|
||||
unsigned char CRC_2;
|
||||
unsigned char CRC_3;
|
||||
unsigned char CRC_4;
|
||||
unsigned char data_field_1;
|
||||
unsigned char data_field_2;
|
||||
unsigned char data_field_3;
|
||||
unsigned char data_field_4;
|
||||
int i;
|
||||
CRC_1 = 0;
|
||||
CRC_2 = 0;
|
||||
CRC_3 = 0;
|
||||
CRC_4 = 0;
|
||||
|
||||
size_single_bloc = size_in/3;
|
||||
if (size_in % 3) {
|
||||
size_single_bloc++;
|
||||
}
|
||||
size_single_bloc_pl1 = size_single_bloc + 1;
|
||||
size_out = 4 * size_single_bloc_pl1;
|
||||
for (i=0; i<size_single_bloc; i++) {
|
||||
data_field_1 = data_in[i];
|
||||
data_field_2 = data_in[size_single_bloc + i];
|
||||
data_field_3 = data_in[(2*size_single_bloc) + i];
|
||||
data_field_4 = data_field_1 ^ data_field_2 ^ data_field_3;
|
||||
CRC_1 = CRC_1 ^ data_field_1;
|
||||
CRC_2 = CRC_2 ^ data_field_2;
|
||||
CRC_3 = CRC_3 ^ data_field_3;
|
||||
CRC_4 = CRC_4 ^ data_field_4;
|
||||
data_out[i] = data_field_1;
|
||||
data_out[size_single_bloc_pl1 + i] = data_field_2;
|
||||
data_out[(2*size_single_bloc_pl1) + i] = data_field_3;
|
||||
data_out[(3*size_single_bloc_pl1) + i] = data_field_4;
|
||||
}
|
||||
data_out[size_single_bloc] = CRC_1;
|
||||
data_out[(2*size_single_bloc) + 1] = CRC_2;
|
||||
data_out[(3*size_single_bloc) + 2] = CRC_3;
|
||||
data_out[(4*size_single_bloc) + 3] = CRC_4;
|
||||
return size_out;
|
||||
}
|
||||
|
||||
int FEC_decode(unsigned char* data_out, int size_in, unsigned int* micro_BER) {
|
||||
int size_out;
|
||||
int size_single_bloc;
|
||||
int size_single_bloc_pl1;
|
||||
unsigned char CRC_check_1;
|
||||
unsigned char CRC_check_2;
|
||||
unsigned char CRC_check_3;
|
||||
unsigned char CRC_check_4;
|
||||
unsigned char data_temp;
|
||||
unsigned int nb_errors;
|
||||
int i;
|
||||
size_single_bloc_pl1 = size_in / 4;
|
||||
size_single_bloc = size_single_bloc_pl1 - 1;
|
||||
|
||||
CRC_check_1 = 0;
|
||||
CRC_check_2 = 0;
|
||||
CRC_check_3 = 0;
|
||||
CRC_check_4 = 0;
|
||||
for (i=0; i<size_single_bloc_pl1; i++) {
|
||||
CRC_check_1 = CRC_check_1 ^ RX_FIFO_data [(RX_FIFO_RD_point + i) & RX_FIFO_mask];
|
||||
CRC_check_2 = CRC_check_2 ^ RX_FIFO_data [(RX_FIFO_RD_point + size_single_bloc_pl1 + i) & RX_FIFO_mask];
|
||||
CRC_check_3 = CRC_check_3 ^ RX_FIFO_data [(RX_FIFO_RD_point + (2*size_single_bloc_pl1) + i) & RX_FIFO_mask];
|
||||
CRC_check_4 = CRC_check_4 ^ RX_FIFO_data [(RX_FIFO_RD_point + (3*size_single_bloc_pl1) + i) & RX_FIFO_mask];
|
||||
}
|
||||
|
||||
nb_errors = 0;
|
||||
if (CRC_check_1 != 0) { nb_errors++; }// printf("error 1 %X ;", CRC_check_1);}
|
||||
if (CRC_check_2 != 0) { nb_errors++; }// printf("error 2 %X ;", CRC_check_2);}
|
||||
if (CRC_check_3 != 0) { nb_errors++; }// printf("error 3 %X ;", CRC_check_3);}
|
||||
if (CRC_check_4 != 0) { nb_errors++; }// printf("error 4 %X ;", CRC_check_4);}
|
||||
//printf("\r\n");
|
||||
//if (nb_errors>0) {printf("ERR%i\r\n", nb_errors);}
|
||||
|
||||
(*micro_BER) = nb_errors;
|
||||
|
||||
if (nb_errors>1) {
|
||||
size_out = 0; //unrecoverable error
|
||||
//printf("unrecoverable\r\n");
|
||||
} else {
|
||||
// OK
|
||||
size_out = 3 * size_single_bloc;
|
||||
// FIELD 1
|
||||
if (CRC_check_1==0) {//field 1 OK
|
||||
for (i=0; i<size_single_bloc; i++) {
|
||||
data_out[i] = RX_FIFO_data [(RX_FIFO_RD_point + i) & RX_FIFO_mask];
|
||||
}
|
||||
} else {// field 1 corrupted, reconstruction from field 2, 3 and 4
|
||||
for (i=0; i<size_single_bloc; i++) {
|
||||
data_temp = RX_FIFO_data [(RX_FIFO_RD_point + size_single_bloc_pl1 + i) & RX_FIFO_mask];
|
||||
data_temp = data_temp ^ RX_FIFO_data [(RX_FIFO_RD_point + (2*size_single_bloc_pl1) + i) & RX_FIFO_mask];
|
||||
data_temp = data_temp ^ RX_FIFO_data [(RX_FIFO_RD_point + (3*size_single_bloc_pl1) + i) & RX_FIFO_mask];
|
||||
data_out[i] = data_temp;
|
||||
}
|
||||
}
|
||||
// FIELD 2
|
||||
if (CRC_check_2==0) {//field 2 OK
|
||||
for (i=0; i<size_single_bloc; i++) {
|
||||
data_out[size_single_bloc + i] = RX_FIFO_data [(RX_FIFO_RD_point + size_single_bloc_pl1 + i) & RX_FIFO_mask];
|
||||
}
|
||||
} else {// field 2 corrupted, reconstruction from field 1, 3 and 4
|
||||
for (i=0; i<size_single_bloc; i++) {
|
||||
data_temp = RX_FIFO_data [(RX_FIFO_RD_point + i) & RX_FIFO_mask]; //field 1
|
||||
data_temp = data_temp ^ RX_FIFO_data [(RX_FIFO_RD_point + (2*size_single_bloc_pl1) + i) & RX_FIFO_mask]; //field 3
|
||||
data_temp = data_temp ^ RX_FIFO_data [(RX_FIFO_RD_point + (3*size_single_bloc_pl1) + i) & RX_FIFO_mask]; //field 4
|
||||
data_out[size_single_bloc + i] = data_temp;
|
||||
}
|
||||
}
|
||||
// FIELD 3
|
||||
if (CRC_check_3==0) {//field 3 OK
|
||||
for (i=0; i<size_single_bloc; i++) {
|
||||
data_out[(2*size_single_bloc) + i] = RX_FIFO_data[(RX_FIFO_RD_point + (2*size_single_bloc_pl1) + i) & RX_FIFO_mask];
|
||||
}
|
||||
} else {// field 3 corrupted, reconstruction from field 1, 2 and 4
|
||||
for (i=0; i<size_single_bloc; i++) {
|
||||
data_temp = RX_FIFO_data [(RX_FIFO_RD_point + i) & RX_FIFO_mask]; //field 1
|
||||
data_temp = data_temp ^ RX_FIFO_data [(RX_FIFO_RD_point + size_single_bloc_pl1 + i) & RX_FIFO_mask]; //field 2
|
||||
data_temp = data_temp ^ RX_FIFO_data [(RX_FIFO_RD_point + (3*size_single_bloc_pl1) + i) & RX_FIFO_mask]; //field 4
|
||||
data_out[(2*size_single_bloc) + i] = data_temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
RX_FIFO_RD_point = RX_FIFO_RD_point + size_in;
|
||||
return size_out;
|
||||
}
|
||||
|
||||
int size_w_FEC_compute (int size_wo_FEC) {
|
||||
int size_w_FEC;
|
||||
size_w_FEC = size_wo_FEC/3;
|
||||
if ((size_wo_FEC%3) > 0) { size_w_FEC++; }
|
||||
size_w_FEC = 4*size_w_FEC + 4;
|
||||
return size_w_FEC;
|
||||
}
|
||||
|
||||
void segment_and_push (unsigned char* data_unsegmented, int total_size, unsigned char client_addr, unsigned char protocol) {
|
||||
static unsigned char packet_counter = 0;
|
||||
unsigned char segment_counter = 0;
|
||||
unsigned char segmenter_byte;
|
||||
unsigned char is_last_segment;
|
||||
int size_wo_FEC;
|
||||
int size_w_FEC;
|
||||
int rframe_length;
|
||||
int size_remaining;
|
||||
int segment_size;
|
||||
int size_to_send;
|
||||
unsigned char data_wo_FEC[300];
|
||||
#ifdef EXT_SRAM_USAGE
|
||||
unsigned char radio_pckt[360];
|
||||
#endif
|
||||
int size_sent;
|
||||
unsigned int rsize_needed;
|
||||
unsigned int timer_snapshot;
|
||||
size_remaining = total_size;
|
||||
|
||||
if (size_remaining <63) {
|
||||
size_remaining = 63;
|
||||
}
|
||||
|
||||
segment_counter = 0;
|
||||
size_sent = 0;
|
||||
rsize_needed = 100 + (total_size * 1.4);
|
||||
if (total_size < 1510) {
|
||||
if (TX_FIFO_full_global(1) == 0) {
|
||||
G_uplink_bandwidth_temp = G_uplink_bandwidth_temp + total_size;
|
||||
TX_radio_IPv4_counter++;
|
||||
while (size_remaining > 0) {
|
||||
if (size_remaining <= 252) {
|
||||
segment_size = size_remaining;
|
||||
is_last_segment = 0x08;
|
||||
} else {
|
||||
segment_size = 252;
|
||||
is_last_segment = 0x00;
|
||||
}
|
||||
if (segment_size <63) {
|
||||
size_to_send = 63;
|
||||
} else {
|
||||
size_to_send = segment_size;
|
||||
}
|
||||
timer_snapshot = GLOBAL_timer.read_us();
|
||||
rframe_TX[0] = (timer_snapshot >> 16) & 0xFF;
|
||||
|
||||
size_wo_FEC = size_to_send + 3; //+ 3 inside FEC header
|
||||
size_w_FEC = size_w_FEC_compute (size_wo_FEC);
|
||||
rframe_length = size_w_FEC + 1 - SI4463_offset_size;
|
||||
if (rframe_length < 0) {rframe_length = 0;}
|
||||
rframe_TX[1] = rframe_length;
|
||||
rframe_TX[2] = 0x01; //TDMA byte
|
||||
|
||||
segmenter_byte = (packet_counter & 0x0F) * 0x10 + is_last_segment + (segment_counter & 0x07);
|
||||
data_wo_FEC[0] = client_addr + parity_bit_elab[(client_addr&0x7F)]; //client address
|
||||
data_wo_FEC[1] = protocol; //protocol : raw ethernet
|
||||
data_wo_FEC[2] = segmenter_byte; // segmenter byte
|
||||
memcpy(data_wo_FEC+3, (data_unsegmented + size_sent), size_to_send);
|
||||
size_sent = size_sent + size_to_send;
|
||||
size_w_FEC = FEC_encode2(data_wo_FEC, rframe_TX+3, size_wo_FEC);
|
||||
TX_FIFO_write_global(rframe_TX, size_w_FEC+3);//3 for timer & length & TDMA_byte
|
||||
size_remaining = size_remaining - segment_size;
|
||||
segment_counter++;
|
||||
|
||||
}
|
||||
packet_counter++;
|
||||
} else {
|
||||
//if (super_debug) {
|
||||
// printf ("FULL last_ready:%08X RD_point:%08X\r\n", TXPS_FIFO->last_ready, TXPS_FIFO->RD_point);
|
||||
//}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//unsigned char TX_buff_intern_FIFOdata[42][384];
|
||||
//unsigned int TX_buff_intern_WR_pointer=0;
|
||||
//unsigned int TX_buff_intern_RD_pointer=0;
|
||||
//unsigned int TX_buff_intern_last_ready=0;
|
||||
|
||||
void TX_FIFO_write_global(unsigned char* data, int size) {
|
||||
if (is_SRAM_ext == 1) {
|
||||
TX_ext_FIFO_write(data, size);
|
||||
} else {
|
||||
TX_intern_FIFO_write(data, size);
|
||||
}
|
||||
}
|
||||
|
||||
void TX_intern_FIFO_write(unsigned char* data, int size) {
|
||||
if (size <= 128) {
|
||||
memcpy (TX_buff_intern_FIFOdata[TX_buff_intern_WR_pointer % 128], data, 128);//size
|
||||
TX_buff_intern_WR_pointer++;
|
||||
}
|
||||
else if (size <= 256) {
|
||||
memcpy (TX_buff_intern_FIFOdata[TX_buff_intern_WR_pointer % 128], data, 128);
|
||||
TX_buff_intern_WR_pointer++;
|
||||
memcpy (TX_buff_intern_FIFOdata[TX_buff_intern_WR_pointer % 128], data+128, 128);//size-128
|
||||
TX_buff_intern_WR_pointer++;
|
||||
}
|
||||
else {
|
||||
memcpy (TX_buff_intern_FIFOdata[TX_buff_intern_WR_pointer % 128], data, 128);
|
||||
TX_buff_intern_WR_pointer++;
|
||||
memcpy (TX_buff_intern_FIFOdata[TX_buff_intern_WR_pointer % 128], data+128, 128);
|
||||
TX_buff_intern_WR_pointer++;
|
||||
memcpy (TX_buff_intern_FIFOdata[TX_buff_intern_WR_pointer % 128], data+256, 128);//size-256
|
||||
TX_buff_intern_WR_pointer++;
|
||||
}
|
||||
TX_buff_intern_last_ready = TX_buff_intern_WR_pointer;
|
||||
}
|
||||
|
||||
void ext_SRAM_write2(ext_SRAM_chip* loc_SPI, unsigned char* loc_data, unsigned int address, int size) {
|
||||
//static unsigned char trash[350];
|
||||
static unsigned char command[6] = {0x02, 0x00, 0x00, 0x00};
|
||||
loc_SPI->cs->write(0);
|
||||
command[3] = address & 0xFF;
|
||||
command[2] = (address & 0xFF00) >> 8;
|
||||
command[1] = (address & 0xFF0000) >> 16;
|
||||
loc_SPI->spi_port->transfer_2 (command, 4, trash, 4);
|
||||
loc_SPI->spi_port->transfer_2 (loc_data, size, trash, size);
|
||||
loc_SPI->cs->write(1);
|
||||
}
|
||||
|
||||
void TX_ext_FIFO_write(unsigned char* data, int size) {
|
||||
unsigned int loc_address;
|
||||
//printf("size_wr_ext %i\n\r", size);
|
||||
if (size <= 128) {
|
||||
loc_address = (TX_buff_ext_WR_pointer & 1023)*128;
|
||||
ext_SRAM_write2(SPI_SRAM_p, data, loc_address, size);
|
||||
TX_buff_ext_sizes[TX_buff_ext_WR_pointer & 1023] = data[1];
|
||||
TX_buff_ext_WR_pointer++;
|
||||
}
|
||||
else if (size <= 256) {
|
||||
loc_address = (TX_buff_ext_WR_pointer & 1023)*128;
|
||||
ext_SRAM_write2(SPI_SRAM_p, data, loc_address, 128);
|
||||
TX_buff_ext_sizes[TX_buff_ext_WR_pointer & 1023] = data[1];
|
||||
TX_buff_ext_WR_pointer++;
|
||||
loc_address = (TX_buff_ext_WR_pointer & 1023)*128;
|
||||
ext_SRAM_write2(SPI_SRAM_p, data+128, loc_address, size-128);
|
||||
TX_buff_ext_sizes[TX_buff_ext_WR_pointer & 1023] = 0;
|
||||
TX_buff_ext_WR_pointer++;
|
||||
}
|
||||
else {
|
||||
loc_address = (TX_buff_ext_WR_pointer & 1023)*128;
|
||||
ext_SRAM_write2(SPI_SRAM_p, data, loc_address, 128);
|
||||
TX_buff_ext_sizes[TX_buff_ext_WR_pointer & 1023] = data[1];
|
||||
TX_buff_ext_WR_pointer++;
|
||||
loc_address = (TX_buff_ext_WR_pointer & 1023)*128;
|
||||
ext_SRAM_write2(SPI_SRAM_p, data+128, loc_address, 128);
|
||||
TX_buff_ext_sizes[TX_buff_ext_WR_pointer & 1023] = 0;
|
||||
TX_buff_ext_WR_pointer++;
|
||||
loc_address = (TX_buff_ext_WR_pointer & 1023)*128;
|
||||
ext_SRAM_write2(SPI_SRAM_p, data+256, loc_address, size-256);
|
||||
TX_buff_ext_sizes[TX_buff_ext_WR_pointer & 1023] = 0;
|
||||
TX_buff_ext_WR_pointer++;
|
||||
}
|
||||
TX_buff_ext_last_ready = TX_buff_ext_WR_pointer;
|
||||
}
|
||||
|
||||
int TX_intern_FIFO_get_lastfrzize(void) {
|
||||
int size_loc;
|
||||
size_loc = TX_buff_intern_FIFOdata[TX_buff_intern_RD_pointer % 128][1];
|
||||
size_loc = size_loc + 1 + SI4463_offset_size;
|
||||
return size_loc;
|
||||
}
|
||||
|
||||
int TX_intern_FIFO_read(unsigned char* data) {
|
||||
int size_loc;
|
||||
size_loc = TX_buff_intern_FIFOdata[TX_buff_intern_RD_pointer % 128][1];//42
|
||||
size_loc = size_loc + 1 + SI4463_offset_size;
|
||||
size_loc = size_loc + 1;//for timer coarse
|
||||
//printf("sizeread: %i\r\n", size_loc);
|
||||
if (size_loc <= 128) {
|
||||
memcpy(data, TX_buff_intern_FIFOdata[TX_buff_intern_RD_pointer % 128], 128);//size_loc
|
||||
TX_buff_intern_RD_pointer++;
|
||||
}
|
||||
else if (size_loc<=256) {
|
||||
memcpy(data, TX_buff_intern_FIFOdata[TX_buff_intern_RD_pointer % 128], 128);
|
||||
TX_buff_intern_RD_pointer++;
|
||||
memcpy(data+128, TX_buff_intern_FIFOdata[TX_buff_intern_RD_pointer % 128], 128);//size_loc-128
|
||||
TX_buff_intern_RD_pointer++;
|
||||
}
|
||||
else {
|
||||
memcpy(data, TX_buff_intern_FIFOdata[TX_buff_intern_RD_pointer % 128], 128);
|
||||
TX_buff_intern_RD_pointer++;
|
||||
memcpy(data+128, TX_buff_intern_FIFOdata[TX_buff_intern_RD_pointer % 128], 128);
|
||||
TX_buff_intern_RD_pointer++;
|
||||
memcpy(data+256, TX_buff_intern_FIFOdata[TX_buff_intern_RD_pointer % 128], 128);//size_loc-256
|
||||
TX_buff_intern_RD_pointer++;
|
||||
}
|
||||
return size_loc;
|
||||
}
|
||||
|
||||
unsigned int compute_TX_buff_size_global(void) {//for TDMA
|
||||
unsigned int size_loc;
|
||||
if (is_SRAM_ext == 1) {
|
||||
size_loc = (TX_buff_intern_last_ready - TX_buff_intern_RD_pointer);
|
||||
size_loc = size_loc + (TX_buff_ext_last_ready - TX_buff_ext_RD_pointer);
|
||||
size_loc = size_loc/3;
|
||||
} else {
|
||||
size_loc = (TX_buff_intern_last_ready - TX_buff_intern_RD_pointer)/3;
|
||||
}
|
||||
return size_loc;
|
||||
}
|
||||
|
||||
int TX_FIFO_full_global (int priority) {
|
||||
if (is_SRAM_ext == 1) {
|
||||
return TX_FIFO_full_withSRAM(priority);
|
||||
} else {
|
||||
return TX_FIFO_full_woSRAM(priority);
|
||||
}
|
||||
}
|
||||
|
||||
int TX_FIFO_full_woSRAM (int priority) {
|
||||
//priority : 1= normal, 0=high priority (signaling)
|
||||
int FIFO_filling;
|
||||
int loc_threshold;
|
||||
FIFO_filling = TX_buff_intern_WR_pointer - TX_buff_intern_RD_pointer;
|
||||
if (priority == 1) {
|
||||
loc_threshold = 110;//low priority
|
||||
} else {
|
||||
loc_threshold = 120;//high priority
|
||||
}
|
||||
if (FIFO_filling > loc_threshold) {//40
|
||||
//printf("FIFO_full!\r\n");
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int TX_FIFO_full_withSRAM (int priority) {
|
||||
int FIFO_filling;
|
||||
int loc_threshold;
|
||||
FIFO_filling = TX_buff_ext_WR_pointer - TX_buff_ext_RD_pointer;
|
||||
if (priority == 1) {
|
||||
loc_threshold = 950;//low priority
|
||||
} else {
|
||||
loc_threshold = 1000;//high priority
|
||||
}
|
||||
if (FIFO_filling > loc_threshold) {//40
|
||||
//printf("FIFO_fullext!\r\n");
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void ext_SRAM_read2(ext_SRAM_chip* loc_SPI, unsigned char* loc_data, unsigned int address, int size) {
|
||||
static unsigned char command[6] = {0x03, 0x00, 0x00, 0x00};
|
||||
loc_SPI->cs->write(0);
|
||||
command[3] = address & 0xFF;
|
||||
command[2] = (address & 0xFF00) >> 8;
|
||||
command[1] = (address & 0xFF0000) >> 16;
|
||||
loc_SPI->spi_port->transfer_2 (command, 4, trash, 4);
|
||||
loc_SPI->spi_port->transfer_2 (trash, size, loc_data, size);
|
||||
loc_SPI->cs->write(1);
|
||||
}
|
||||
|
||||
void ext_SRAM_periodic_call(void) {
|
||||
int intern_FIFO_filling;
|
||||
int ext_FIFO_filling;
|
||||
int i, loc_size;
|
||||
int loc_bloc_nb=1;
|
||||
unsigned int loc_address;
|
||||
unsigned int loc_time_int;
|
||||
unsigned char RX_frame_datation;
|
||||
unsigned char loc_time_char;
|
||||
loc_time_int = GLOBAL_timer.read_us();
|
||||
loc_time_char = (loc_time_int >> 16) & 0xFF;
|
||||
intern_FIFO_filling = TX_buff_intern_WR_pointer - TX_buff_intern_RD_pointer;
|
||||
ext_FIFO_filling = TX_buff_ext_WR_pointer - TX_buff_ext_RD_pointer;
|
||||
while ( (ext_FIFO_filling > 0) && (intern_FIFO_filling <= 9) ) {
|
||||
for (i=1; i<=loc_bloc_nb; i++) {
|
||||
loc_address = (TX_buff_ext_RD_pointer & 1023) *128;
|
||||
ext_SRAM_read2(SPI_SRAM_p, TX_buff_intern_FIFOdata[TX_buff_intern_WR_pointer % 128], loc_address, 128);
|
||||
|
||||
if (i==1) {
|
||||
RX_frame_datation = TX_buff_intern_FIFOdata[TX_buff_intern_WR_pointer % 128][0];
|
||||
loc_size = TX_buff_intern_FIFOdata[TX_buff_intern_WR_pointer % 128][1];
|
||||
loc_size = loc_size + SI4463_offset_size + 2;
|
||||
//printf("size:%i\r\n", loc_size);
|
||||
if (loc_size <= 128) {
|
||||
loc_bloc_nb = 1;
|
||||
} else if (loc_size <= 256) {
|
||||
loc_bloc_nb = 2;
|
||||
} else {
|
||||
loc_bloc_nb = 3;
|
||||
}
|
||||
}
|
||||
|
||||
//if (TX_buff_ext_sizes[TX_buff_ext_RD_pointer & 1023] > 0) {
|
||||
// TX_buff_intern_FIFOdata[TX_buff_intern_WR_pointer % 128][1] = TX_buff_ext_sizes[TX_buff_ext_RD_pointer & 1023];
|
||||
//}
|
||||
TX_buff_ext_RD_pointer++;
|
||||
//printf("delay %i\r\n", (int)loc_time_char - (int)RX_frame_datation);
|
||||
if ( (loc_time_char - RX_frame_datation) < CONF_Tx_rframe_timeout) {
|
||||
//if (1) {
|
||||
//purge old frames if condition false
|
||||
TX_buff_intern_WR_pointer++;
|
||||
}
|
||||
//else {
|
||||
// printf ("purged!\r\n");//!!!
|
||||
// printf("date1 %i date2 %i\r\n", loc_time_char, RX_frame_datation);
|
||||
//}
|
||||
}
|
||||
TX_buff_intern_last_ready = TX_buff_intern_WR_pointer;
|
||||
intern_FIFO_filling = TX_buff_intern_WR_pointer - TX_buff_intern_RD_pointer;
|
||||
ext_FIFO_filling = TX_buff_ext_WR_pointer - TX_buff_ext_RD_pointer;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//void radio_flush_TX_FIFO(void) {
|
||||
// TXPS_FIFO->WR_point = 0;
|
||||
// TXPS_FIFO->RD_point = 0;
|
||||
// TXPS_FIFO->last_ready = 0;
|
||||
//}
|
||||
|
||||
int ext_SRAM_detect(void) {
|
||||
unsigned char data_1[4] = {0x3C, 0x4A, 0xF3, 0x12};
|
||||
unsigned char data_2[4] = {0xFF, 0xFF, 0xFF, 0xFF};
|
||||
int i;
|
||||
int sram_detected = 1;
|
||||
ext_SRAM_write2(SPI_SRAM_p, data_1, 2345, 4);
|
||||
ext_SRAM_read2(SPI_SRAM_p, data_2, 2345, 4);
|
||||
for (i=0; i<4; i++) {
|
||||
if (data_2[i] != data_1[i]) {sram_detected = 0;}
|
||||
}
|
||||
return sram_detected;
|
||||
}
|
||||
|
||||
void radio_flush_TX_FIFO(void) {
|
||||
TX_buff_intern_WR_pointer=0;
|
||||
TX_buff_intern_RD_pointer=0;
|
||||
TX_buff_intern_last_ready=0;
|
||||
TX_buff_ext_WR_pointer=0;
|
||||
TX_buff_ext_RD_pointer=0;
|
||||
TX_buff_ext_last_ready=0;
|
||||
}
|
||||
|
||||
void radio_save_RSSI_BER (unsigned char client_byte, unsigned char is_downlink, unsigned char RSSI_loc, unsigned int micro_BER) {
|
||||
unsigned char client_ID = 0xF0;
|
||||
client_ID = client_byte & 0x7F;
|
||||
|
||||
if ( (is_TDMA_master) && (is_downlink == 0) && (parity_bit_check[client_byte]) && (client_ID < radio_addr_table_size) ) {
|
||||
G_radio_addr_table_RSSI[client_ID] = (26 * RSSI_loc) + (0.9 * G_radio_addr_table_RSSI[client_ID]);
|
||||
G_radio_addr_table_BER[client_ID] = (1250 * micro_BER) + (0.9 * G_radio_addr_table_BER[client_ID]);
|
||||
|
||||
}
|
||||
if ( (is_TDMA_master == 0) && (is_downlink) ) {
|
||||
G_downlink_RSSI = (26 * RSSI_loc) + (0.9 * G_downlink_RSSI);
|
||||
G_downlink_BER = (1250 * micro_BER) + (0.9 * G_downlink_BER);
|
||||
}
|
||||
//if (micro_BER>0) {printf("err save%i %i\r\n", micro_BER, G_downlink_BER);}
|
||||
}
|
||||
+66
@@ -0,0 +1,66 @@
|
||||
// This file is part of "NPR70 modem firmware" software
|
||||
// (A GMSK data modem for ham radio 430-440MHz, at several hundreds of kbps)
|
||||
// Copyright (c) 2017-2020 Guillaume F. F4HDK (amateur radio callsign)
|
||||
//
|
||||
// "NPR70 modem firmware" is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// "NPR70 modem firmware" is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with "NPR70 modem firmware". If not, see <http://www.gnu.org/licenses/>
|
||||
|
||||
#ifndef L1L2_RADIO_F4
|
||||
#define L1L2_RADIO_F4
|
||||
|
||||
#include "mbed.h"
|
||||
#include "W5500.h"
|
||||
#include "global_variables.h"
|
||||
#include "ext_SRAM2.h"
|
||||
|
||||
void FDDdown_RX_pckt_treat(unsigned char* in_data, int size);
|
||||
|
||||
void FDDup_RX_FIFO_dequeue(void);
|
||||
|
||||
void radio_RX_FIFO_dequeue (W5500_chip* W5500);
|
||||
|
||||
void radio_signalisation_frame_building(void);
|
||||
|
||||
//int FEC_encode (unsigned char* data_in, TX_buffer_struct* FIFO_out, int size_in);
|
||||
//#ifdef EXT_SRAM_USAGE
|
||||
int FEC_encode2 (unsigned char* data_in, unsigned char* data_out, int size_in);
|
||||
//#endif
|
||||
int FEC_decode(unsigned char* data_out, int size_in, unsigned int* micro_BER);
|
||||
|
||||
int size_w_FEC_compute (int size_wo_FEC);
|
||||
|
||||
void segment_and_push (unsigned char* data_unsegmented, int total_size, unsigned char client_addr, unsigned char protocol);
|
||||
|
||||
void TX_FIFO_write_global(unsigned char* data, int size);
|
||||
void TX_intern_FIFO_write(unsigned char* data, int size);
|
||||
void TX_ext_FIFO_write(unsigned char* data, int size);
|
||||
|
||||
int TX_intern_FIFO_get_lastfrzize(void);
|
||||
|
||||
int TX_intern_FIFO_read(unsigned char* data);
|
||||
|
||||
unsigned int compute_TX_buff_size_global(void);
|
||||
|
||||
int TX_FIFO_full_global (int priority);
|
||||
int TX_FIFO_full_woSRAM (int priority);
|
||||
int TX_FIFO_full_withSRAM (int priority);
|
||||
|
||||
void ext_SRAM_periodic_call(void);
|
||||
|
||||
int ext_SRAM_detect(void);
|
||||
|
||||
void radio_flush_TX_FIFO(void);
|
||||
|
||||
void radio_save_RSSI_BER (unsigned char client_byte, unsigned char is_downlink, unsigned char RSSI_loc, unsigned int micro_BER);
|
||||
|
||||
#endif
|
||||
+1404
File diff suppressed because it is too large
Load Diff
+119
@@ -0,0 +1,119 @@
|
||||
// This file is part of "NPR70 modem firmware" software
|
||||
// (A GMSK data modem for ham radio 430-440MHz, at several hundreds of kbps)
|
||||
// Copyright (c) 2017-2020 Guillaume F. F4HDK (amateur radio callsign)
|
||||
//
|
||||
// "NPR70 modem firmware" is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// "NPR70 modem firmware" is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with "NPR70 modem firmware". If not, see <http://www.gnu.org/licenses/>
|
||||
|
||||
#ifndef SI4463_F4
|
||||
#define SI4463_F4
|
||||
|
||||
#include "mbed.h"
|
||||
#include "SI4463.h"
|
||||
|
||||
#define SI4463_offset_size 90
|
||||
#define SI4463_CONF_RX_FIFO_threshold 90
|
||||
//64
|
||||
#define SI4463_CONF_TX_FIFO_threshold 90
|
||||
#define SI4463_CONF_max_field2_size 345
|
||||
//63
|
||||
|
||||
//#define SI4463_time_byte 8
|
||||
//#define SI4463_zero_frame_time 590
|
||||
|
||||
struct SI4463_Chip{
|
||||
SPI* spi;
|
||||
DigitalOut* cs;
|
||||
InterruptIn* interrupt;
|
||||
int RX_TX_state; //0:nothing 1:RX 2:TX
|
||||
DigitalOut* RX_LED;
|
||||
DigitalOut* SDN;
|
||||
};
|
||||
|
||||
int SI4463_CTS_read_answer(SI4463_Chip* SI4463, unsigned char* data, int size, int timeout);
|
||||
|
||||
int SI4463_configure_from_22(SI4463_Chip* SI4463);
|
||||
int SI4463_configure_from_13(SI4463_Chip* SI4463);
|
||||
int SI4463_configure_from_23(SI4463_Chip* SI4463);
|
||||
int SI4463_configure_from_14(SI4463_Chip* SI4463);
|
||||
int SI4463_configure_from_24(SI4463_Chip* SI4463);
|
||||
|
||||
int SI4463_configure_from_h(SI4463_Chip* SI4463, unsigned char* radio_config_data);
|
||||
|
||||
int SI4463_set_power(SI4463_Chip* SI4463);
|
||||
|
||||
void SI4463_print_version(SI4463_Chip* SI4463);
|
||||
|
||||
void SI4463_FIFO_status(SI4463_Chip* SI4463, int* RX_FIFO_count, int* TX_FIFO_count, int reset);
|
||||
|
||||
//void SI4463_set_GPIO(SI4463_Chip* SI4463, unsigned char GPIO_st_2, unsigned char GPIO_st_3);
|
||||
|
||||
void SI4463_FIFO_write(SI4463_Chip* SI4463, unsigned char* data, int count);
|
||||
|
||||
void SI4463_FIFO_read(SI4463_Chip* SI4463, unsigned char* data, int size);
|
||||
|
||||
void SI4463_change_state (SI4463_Chip* SI4463, unsigned char new_state);
|
||||
|
||||
void SI4463_start_RX (SI4463_Chip* SI4463, unsigned char channel);
|
||||
|
||||
void SI4463_start_TX (SI4463_Chip* SI4463, unsigned char channel, unsigned int size);
|
||||
//void SI4463_start_TX (SI4463_Chip* SI4463, unsigned char channel, unsigned int size, unsigned char next_state);
|
||||
void SI4463_start_TX_repeat (SI4463_Chip* SI4463, unsigned char channel, unsigned int size);
|
||||
|
||||
void SI4463_read_FRR(SI4463_Chip* SI4463, unsigned char* data);
|
||||
|
||||
int SI4463_get_state(SI4463_Chip* SI4463);
|
||||
|
||||
//void SI4463_init_RX();
|
||||
|
||||
void SI4463_clear_IT(SI4463_Chip* SI4463, unsigned char PH_clear, unsigned char modem_clear);
|
||||
|
||||
void SI4463_set_TX_preamble_length (SI4463_Chip* SI4463, unsigned char preamble_length_val);
|
||||
|
||||
int SI4463_read_temperature(SI4463_Chip* SI4463);
|
||||
|
||||
int check_RSSI_without_packet (void);
|
||||
|
||||
void SI4463_periodic_temperature_check(SI4463_Chip* SI4463);
|
||||
|
||||
void SI4463_periodic_temperature_check_2(void);
|
||||
|
||||
void SI4463_temp_check_init(void);
|
||||
|
||||
void SI4463_prepa_TX_1();
|
||||
|
||||
void SI4463_prepa_TX_2();
|
||||
|
||||
void SI4463_TX_to_RX_transition(void);
|
||||
|
||||
void SI4463_RX_timeout (void);
|
||||
|
||||
void SI4463_decide_new_TX_or_not(void);
|
||||
|
||||
void SI4463_TX_new_frame(unsigned char synchro);
|
||||
|
||||
void SI4463_HW_interrupt();
|
||||
|
||||
int SI4463_configure_all(void);
|
||||
|
||||
void SI4463_radio_start(void);
|
||||
void RADIO_off(int need_disconnect);
|
||||
void RADIO_on(int need_disconnect, int need_radio_reconfigure, int HMI_output);
|
||||
void RADIO_off_if_necessary(int need_disconnect);
|
||||
void RADIO_restart_if_necessary(int need_disconnect, int need_radio_reconfigure, int HMI_output);
|
||||
void SI4432_TX_test(unsigned int req_duration);
|
||||
|
||||
void SI4463_set_frequency(float freq_base, float freq_step);
|
||||
void RADIO_compute_freq_params();
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,125 @@
|
||||
#define RADIO_CONFIGURATION_DATA_ARRAY_11 { \
|
||||
0x08, 0x04, 0x21, 0x71, 0x4B, 0x00, 0x00, 0xDC, 0x95, \
|
||||
0x08, 0x05, 0xA6, 0x22, 0x21, 0xF0, 0x41, 0x5B, 0x26, \
|
||||
0x08, 0xE2, 0x2F, 0x1C, 0xBB, 0x0A, 0xA8, 0x94, 0x28, \
|
||||
0x08, 0x05, 0x87, 0x67, 0xE2, 0x58, 0x1A, 0x07, 0x5B, \
|
||||
0x08, 0xE1, 0xD0, 0x72, 0xD8, 0x8A, 0xB8, 0x5B, 0x7D, \
|
||||
0x08, 0x05, 0x11, 0xEC, 0x9E, 0x28, 0x23, 0x1B, 0x6D, \
|
||||
0x08, 0xE2, 0x4F, 0x8A, 0xB2, 0xA9, 0x29, 0x14, 0x13, \
|
||||
0x08, 0x05, 0xD1, 0x2E, 0x71, 0x6A, 0x51, 0x4C, 0x2C, \
|
||||
0x08, 0xE5, 0x80, 0x27, 0x42, 0xA4, 0x69, 0xB0, 0x7F, \
|
||||
0x08, 0x05, 0xAA, 0x81, 0x2A, 0xBD, 0x45, 0xE8, 0xA8, \
|
||||
0x08, 0xEA, 0xE4, 0xF0, 0x24, 0xC9, 0x9F, 0xCC, 0x3C, \
|
||||
0x08, 0x05, 0x08, 0xF5, 0x05, 0x04, 0x27, 0x62, 0x98, \
|
||||
0x08, 0xEA, 0x6B, 0x62, 0x84, 0xA1, 0xF9, 0x4A, 0xE2, \
|
||||
0x08, 0x05, 0xE9, 0x77, 0x05, 0x4F, 0x84, 0xEE, 0x35, \
|
||||
0x08, 0xE2, 0x43, 0xC3, 0x8D, 0xFB, 0xAD, 0x54, 0x25, \
|
||||
0x08, 0x05, 0x14, 0x06, 0x5E, 0x39, 0x36, 0x2F, 0x45, \
|
||||
0x08, 0xEA, 0x0C, 0x1C, 0x74, 0xD0, 0x11, 0xFC, 0x32, \
|
||||
0x08, 0x05, 0xDA, 0x38, 0xBA, 0x0E, 0x3C, 0xE7, 0x8B, \
|
||||
0x08, 0xEA, 0xB0, 0x09, 0xE6, 0xFF, 0x94, 0xBB, 0xA9, \
|
||||
0x08, 0x05, 0xD7, 0x11, 0x29, 0xFE, 0xDC, 0x71, 0xD5, \
|
||||
0x08, 0xEA, 0x7F, 0x83, 0xA7, 0x60, 0x90, 0x62, 0x18, \
|
||||
0x08, 0x05, 0x84, 0x7F, 0x6A, 0xD1, 0x91, 0xC6, 0x52, \
|
||||
0x08, 0xEA, 0x2A, 0xD8, 0x7B, 0x8E, 0x4A, 0x9F, 0x91, \
|
||||
0x08, 0x05, 0xBD, 0xAA, 0x9D, 0x16, 0x18, 0x06, 0x15, \
|
||||
0x08, 0xE2, 0x55, 0xAD, 0x2D, 0x0A, 0x14, 0x1F, 0x5D, \
|
||||
0x08, 0x05, 0xD3, 0xE0, 0x7C, 0x39, 0xCF, 0x01, 0xF0, \
|
||||
0x08, 0xEF, 0x3A, 0x91, 0x72, 0x6A, 0x03, 0xBB, 0x96, \
|
||||
0x08, 0xE7, 0x83, 0x6D, 0xA4, 0x92, 0xFC, 0x13, 0xA7, \
|
||||
0x08, 0xEF, 0xF8, 0xFD, 0xCF, 0x62, 0x07, 0x6F, 0x1E, \
|
||||
0x08, 0xE7, 0x4C, 0xEA, 0x4A, 0x75, 0x4F, 0xD6, 0xCF, \
|
||||
0x08, 0xE2, 0xF6, 0x11, 0xE4, 0x26, 0x0D, 0x4D, 0xC6, \
|
||||
0x08, 0x05, 0xFB, 0xBF, 0xE8, 0x07, 0x89, 0xC3, 0x51, \
|
||||
0x08, 0xEF, 0x82, 0x27, 0x04, 0x3F, 0x96, 0xA8, 0x58, \
|
||||
0x08, 0xE7, 0x41, 0x29, 0x3C, 0x75, 0x2A, 0x03, 0x1C, \
|
||||
0x08, 0xEF, 0xAF, 0x59, 0x98, 0x36, 0xAA, 0x0F, 0x06, \
|
||||
0x08, 0xE6, 0xF6, 0x93, 0x41, 0x2D, 0xEC, 0x0E, 0x99, \
|
||||
0x08, 0x05, 0x29, 0x19, 0x90, 0xE5, 0xAA, 0x36, 0x40, \
|
||||
0x08, 0xE7, 0xFB, 0x68, 0x10, 0x7D, 0x77, 0x5D, 0xC0, \
|
||||
0x08, 0xE7, 0xCB, 0xB4, 0xDD, 0xCE, 0x90, 0x54, 0xBE, \
|
||||
0x08, 0xE7, 0x72, 0x8A, 0xD6, 0x02, 0xF4, 0xDD, 0xCC, \
|
||||
0x08, 0xE7, 0x6A, 0x21, 0x0B, 0x02, 0x86, 0xEC, 0x15, \
|
||||
0x08, 0xE7, 0x7B, 0x7C, 0x3D, 0x6B, 0x81, 0x03, 0xD0, \
|
||||
0x08, 0xEF, 0x7D, 0x61, 0x36, 0x94, 0x7C, 0xA0, 0xDF, \
|
||||
0x08, 0xEF, 0xCC, 0x85, 0x3B, 0xDA, 0xE0, 0x5C, 0x1C, \
|
||||
0x08, 0xE7, 0xE3, 0x75, 0xBB, 0x39, 0x22, 0x4B, 0xA8, \
|
||||
0x08, 0xEF, 0xF9, 0xCE, 0xE0, 0x5E, 0xEB, 0x1D, 0xCB, \
|
||||
0x08, 0xE7, 0xBD, 0xE2, 0x70, 0xD5, 0xAB, 0x4E, 0x3F, \
|
||||
0x08, 0xE7, 0xB7, 0x8D, 0x20, 0x68, 0x6B, 0x09, 0x52, \
|
||||
0x08, 0xEF, 0xA1, 0x1B, 0x90, 0xCD, 0x98, 0x00, 0x63, \
|
||||
0x08, 0xEF, 0x54, 0x67, 0x5D, 0x9C, 0x11, 0xFC, 0x45, \
|
||||
0x08, 0xE7, 0xD4, 0x9B, 0xC8, 0x97, 0xBE, 0x8A, 0x07, \
|
||||
0x08, 0xEF, 0x52, 0x8D, 0x90, 0x63, 0x73, 0xD5, 0x2A, \
|
||||
0x08, 0xEF, 0x03, 0xBC, 0x6E, 0x1C, 0x76, 0xBE, 0x4A, \
|
||||
0x08, 0xE7, 0xC2, 0xED, 0x67, 0xBA, 0x5E, 0x66, 0x21, \
|
||||
0x08, 0xEF, 0xE7, 0x3F, 0x87, 0xBE, 0xE0, 0x7A, 0x6D, \
|
||||
0x08, 0xE7, 0xC9, 0x70, 0x93, 0x1D, 0x64, 0xF5, 0x6C, \
|
||||
0x08, 0xEF, 0xF5, 0x28, 0x08, 0x34, 0xB3, 0xB6, 0x2C, \
|
||||
0x08, 0xEF, 0x3A, 0x0A, 0xEC, 0x0F, 0xDB, 0x56, 0xCA, \
|
||||
0x08, 0xEF, 0x39, 0xA0, 0x6E, 0xED, 0x79, 0xD0, 0x24, \
|
||||
0x08, 0xE7, 0x6C, 0x0B, 0xAF, 0xA9, 0x4E, 0x40, 0xB5, \
|
||||
0x08, 0xE9, 0xB9, 0xAF, 0xBF, 0x25, 0x50, 0xD1, 0x37, \
|
||||
0x08, 0x05, 0x9E, 0xDB, 0xDE, 0x3F, 0x94, 0xE9, 0x6B, \
|
||||
0x08, 0xEC, 0xC5, 0x05, 0xAA, 0x57, 0xDC, 0x8A, 0x5E, \
|
||||
0x08, 0x05, 0x70, 0xDA, 0x84, 0x84, 0xDD, 0xCA, 0x90, \
|
||||
0x07, 0x02, 0x81, 0x00, 0x01, 0xC9, 0xC3, 0x80, \
|
||||
0x08, 0x13, 0x00, 0x20, 0x21, 0x20, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x00, 0x52, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x05, 0x11, 0x10, 0x01, 0x04, 0x21, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x03, 0x00, 0x07, 0x02, 0x71, 0x00, 0x05, 0xC9, 0xC3, 0x80, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0x46, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x01, 0x00, 0x08, 0x03, 0x80, 0x00, 0xB0, 0x10, 0x0C, 0xE8, 0x00, 0x4E, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x06, 0x8D, 0xB9, 0x00, 0x00, 0x02, 0xC0, 0x08, 0x00, 0x12, 0x00, 0x23, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x01, 0x5C, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE0, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x11, 0x11, 0x11, 0x80, 0x1A, 0x20, 0x00, 0x00, 0x28, 0x0C, 0xA4, 0x23, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x45, 0x03, 0x00, 0x85, 0x01, 0x00, \
|
||||
0x08, 0x11, 0x20, 0x04, 0x4B, 0x06, 0x09, 0x10, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x94, 0x0A, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x03, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x04, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, \
|
||||
0x05, 0x11, 0x22, 0x01, 0x03, 0x1D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x2C, 0x0E, 0x0B, 0x04, 0x0C, 0x73, 0x03, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x37, 0x09, 0x00, 0x00, 0x0A, 0xEC, 0x20, 0xFE, \
|
||||
0x08, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x17, 0x56, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x17, 0x13, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x01, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x07, 0x11, 0x01, 0x03, 0x00, 0x03, 0x33, 0x01, \
|
||||
0x08, 0x11, 0x02, 0x04, 0x00, 0x04, 0x06, 0x0A, 0x09, \
|
||||
0x0D, 0x11, 0x10, 0x09, 0x00, 0x10, 0x14, 0x00, 0xEF, 0x31, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0A, 0x11, 0x11, 0x06, 0x00, 0x02, 0x45, 0xD2, 0xCC, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x00, 0x04, 0x01, 0x08, 0xFF, 0xFF, 0x20, 0x02, 0x00, 0x2A, 0x01, 0x5A, 0x30, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x0C, 0x40, 0x00, 0x01, 0x06, 0x80, 0x00, 0x3F, 0x02, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x09, 0x11, 0x12, 0x05, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x08, 0x11, 0x12, 0x04, 0x36, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x03, 0x00, 0x07, 0x1E, 0x84, 0x80, 0x09, 0xC9, 0xC3, 0x80, 0x00, 0x0D, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0xA7, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x01, 0x00, 0x08, 0x03, 0x80, 0x00, 0x10, 0x20, 0x00, 0xE8, 0x00, 0x4B, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x06, 0xD3, 0xA0, 0x06, 0xD4, 0x02, 0x00, 0x00, 0x00, 0x23, 0x86, 0xD4, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x00, 0xD3, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE0, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x11, 0x10, 0x10, 0x80, 0x1A, 0x40, 0x00, 0x00, 0x28, 0x0C, 0xA4, 0x23, \
|
||||
0x0E, 0x11, 0x20, 0x0A, 0x45, 0x03, 0x01, 0x15, 0x01, 0x00, 0xFF, 0x06, 0x02, 0x18, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x84, 0x0A, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x04, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x08, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0xFF, 0xC4, 0x30, 0x7F, 0xF5, 0xB5, 0xB8, 0xDE, 0x05, 0x17, 0x16, 0x0C, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x03, 0x00, 0x15, 0xFF, 0x00, 0x00, 0xFF, 0xC4, 0x30, 0x7F, 0xF5, 0xB5, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xB8, 0xDE, 0x05, 0x17, 0x16, 0x0C, 0x03, 0x00, 0x15, 0xFF, 0x00, 0x00, \
|
||||
0x08, 0x11, 0x22, 0x04, 0x00, 0x08, 0x7F, 0x00, 0x1D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x34, 0x04, 0x0B, 0x04, 0x07, 0x70, 0x03, \
|
||||
0x10, 0x11, 0x30, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x38, 0x0A, 0xAA, 0xAA, 0x0A, 0xEC, 0x20, 0xFE, \
|
||||
0x00 \
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
#define RADIO_CONFIGURATION_DATA_ARRAY_11 { \
|
||||
0x08, 0x04, 0x21, 0x71, 0x4B, 0x00, 0x00, 0xDC, 0x95, \
|
||||
0x08, 0x05, 0xA6, 0x22, 0x21, 0xF0, 0x41, 0x5B, 0x26, \
|
||||
0x08, 0xE2, 0x2F, 0x1C, 0xBB, 0x0A, 0xA8, 0x94, 0x28, \
|
||||
0x08, 0x05, 0x87, 0x67, 0xE2, 0x58, 0x1A, 0x07, 0x5B, \
|
||||
0x08, 0xE1, 0xD0, 0x72, 0xD8, 0x8A, 0xB8, 0x5B, 0x7D, \
|
||||
0x08, 0x05, 0x11, 0xEC, 0x9E, 0x28, 0x23, 0x1B, 0x6D, \
|
||||
0x08, 0xE2, 0x4F, 0x8A, 0xB2, 0xA9, 0x29, 0x14, 0x13, \
|
||||
0x08, 0x05, 0xD1, 0x2E, 0x71, 0x6A, 0x51, 0x4C, 0x2C, \
|
||||
0x08, 0xE5, 0x80, 0x27, 0x42, 0xA4, 0x69, 0xB0, 0x7F, \
|
||||
0x08, 0x05, 0xAA, 0x81, 0x2A, 0xBD, 0x45, 0xE8, 0xA8, \
|
||||
0x08, 0xEA, 0xE4, 0xF0, 0x24, 0xC9, 0x9F, 0xCC, 0x3C, \
|
||||
0x08, 0x05, 0x08, 0xF5, 0x05, 0x04, 0x27, 0x62, 0x98, \
|
||||
0x08, 0xEA, 0x6B, 0x62, 0x84, 0xA1, 0xF9, 0x4A, 0xE2, \
|
||||
0x08, 0x05, 0xE9, 0x77, 0x05, 0x4F, 0x84, 0xEE, 0x35, \
|
||||
0x08, 0xE2, 0x43, 0xC3, 0x8D, 0xFB, 0xAD, 0x54, 0x25, \
|
||||
0x08, 0x05, 0x14, 0x06, 0x5E, 0x39, 0x36, 0x2F, 0x45, \
|
||||
0x08, 0xEA, 0x0C, 0x1C, 0x74, 0xD0, 0x11, 0xFC, 0x32, \
|
||||
0x08, 0x05, 0xDA, 0x38, 0xBA, 0x0E, 0x3C, 0xE7, 0x8B, \
|
||||
0x08, 0xEA, 0xB0, 0x09, 0xE6, 0xFF, 0x94, 0xBB, 0xA9, \
|
||||
0x08, 0x05, 0xD7, 0x11, 0x29, 0xFE, 0xDC, 0x71, 0xD5, \
|
||||
0x08, 0xEA, 0x7F, 0x83, 0xA7, 0x60, 0x90, 0x62, 0x18, \
|
||||
0x08, 0x05, 0x84, 0x7F, 0x6A, 0xD1, 0x91, 0xC6, 0x52, \
|
||||
0x08, 0xEA, 0x2A, 0xD8, 0x7B, 0x8E, 0x4A, 0x9F, 0x91, \
|
||||
0x08, 0x05, 0xBD, 0xAA, 0x9D, 0x16, 0x18, 0x06, 0x15, \
|
||||
0x08, 0xE2, 0x55, 0xAD, 0x2D, 0x0A, 0x14, 0x1F, 0x5D, \
|
||||
0x08, 0x05, 0xD3, 0xE0, 0x7C, 0x39, 0xCF, 0x01, 0xF0, \
|
||||
0x08, 0xEF, 0x3A, 0x91, 0x72, 0x6A, 0x03, 0xBB, 0x96, \
|
||||
0x08, 0xE7, 0x83, 0x6D, 0xA4, 0x92, 0xFC, 0x13, 0xA7, \
|
||||
0x08, 0xEF, 0xF8, 0xFD, 0xCF, 0x62, 0x07, 0x6F, 0x1E, \
|
||||
0x08, 0xE7, 0x4C, 0xEA, 0x4A, 0x75, 0x4F, 0xD6, 0xCF, \
|
||||
0x08, 0xE2, 0xF6, 0x11, 0xE4, 0x26, 0x0D, 0x4D, 0xC6, \
|
||||
0x08, 0x05, 0xFB, 0xBF, 0xE8, 0x07, 0x89, 0xC3, 0x51, \
|
||||
0x08, 0xEF, 0x82, 0x27, 0x04, 0x3F, 0x96, 0xA8, 0x58, \
|
||||
0x08, 0xE7, 0x41, 0x29, 0x3C, 0x75, 0x2A, 0x03, 0x1C, \
|
||||
0x08, 0xEF, 0xAF, 0x59, 0x98, 0x36, 0xAA, 0x0F, 0x06, \
|
||||
0x08, 0xE6, 0xF6, 0x93, 0x41, 0x2D, 0xEC, 0x0E, 0x99, \
|
||||
0x08, 0x05, 0x29, 0x19, 0x90, 0xE5, 0xAA, 0x36, 0x40, \
|
||||
0x08, 0xE7, 0xFB, 0x68, 0x10, 0x7D, 0x77, 0x5D, 0xC0, \
|
||||
0x08, 0xE7, 0xCB, 0xB4, 0xDD, 0xCE, 0x90, 0x54, 0xBE, \
|
||||
0x08, 0xE7, 0x72, 0x8A, 0xD6, 0x02, 0xF4, 0xDD, 0xCC, \
|
||||
0x08, 0xE7, 0x6A, 0x21, 0x0B, 0x02, 0x86, 0xEC, 0x15, \
|
||||
0x08, 0xE7, 0x7B, 0x7C, 0x3D, 0x6B, 0x81, 0x03, 0xD0, \
|
||||
0x08, 0xEF, 0x7D, 0x61, 0x36, 0x94, 0x7C, 0xA0, 0xDF, \
|
||||
0x08, 0xEF, 0xCC, 0x85, 0x3B, 0xDA, 0xE0, 0x5C, 0x1C, \
|
||||
0x08, 0xE7, 0xE3, 0x75, 0xBB, 0x39, 0x22, 0x4B, 0xA8, \
|
||||
0x08, 0xEF, 0xF9, 0xCE, 0xE0, 0x5E, 0xEB, 0x1D, 0xCB, \
|
||||
0x08, 0xE7, 0xBD, 0xE2, 0x70, 0xD5, 0xAB, 0x4E, 0x3F, \
|
||||
0x08, 0xE7, 0xB7, 0x8D, 0x20, 0x68, 0x6B, 0x09, 0x52, \
|
||||
0x08, 0xEF, 0xA1, 0x1B, 0x90, 0xCD, 0x98, 0x00, 0x63, \
|
||||
0x08, 0xEF, 0x54, 0x67, 0x5D, 0x9C, 0x11, 0xFC, 0x45, \
|
||||
0x08, 0xE7, 0xD4, 0x9B, 0xC8, 0x97, 0xBE, 0x8A, 0x07, \
|
||||
0x08, 0xEF, 0x52, 0x8D, 0x90, 0x63, 0x73, 0xD5, 0x2A, \
|
||||
0x08, 0xEF, 0x03, 0xBC, 0x6E, 0x1C, 0x76, 0xBE, 0x4A, \
|
||||
0x08, 0xE7, 0xC2, 0xED, 0x67, 0xBA, 0x5E, 0x66, 0x21, \
|
||||
0x08, 0xEF, 0xE7, 0x3F, 0x87, 0xBE, 0xE0, 0x7A, 0x6D, \
|
||||
0x08, 0xE7, 0xC9, 0x70, 0x93, 0x1D, 0x64, 0xF5, 0x6C, \
|
||||
0x08, 0xEF, 0xF5, 0x28, 0x08, 0x34, 0xB3, 0xB6, 0x2C, \
|
||||
0x08, 0xEF, 0x3A, 0x0A, 0xEC, 0x0F, 0xDB, 0x56, 0xCA, \
|
||||
0x08, 0xEF, 0x39, 0xA0, 0x6E, 0xED, 0x79, 0xD0, 0x24, \
|
||||
0x08, 0xE7, 0x6C, 0x0B, 0xAF, 0xA9, 0x4E, 0x40, 0xB5, \
|
||||
0x08, 0xE9, 0xB9, 0xAF, 0xBF, 0x25, 0x50, 0xD1, 0x37, \
|
||||
0x08, 0x05, 0x9E, 0xDB, 0xDE, 0x3F, 0x94, 0xE9, 0x6B, \
|
||||
0x08, 0xEC, 0xC5, 0x05, 0xAA, 0x57, 0xDC, 0x8A, 0x5E, \
|
||||
0x08, 0x05, 0x70, 0xDA, 0x84, 0x84, 0xDD, 0xCA, 0x90, \
|
||||
0x07, 0x02, 0x81, 0x00, 0x01, 0xC9, 0xC3, 0x80, \
|
||||
0x08, 0x13, 0x00, 0x20, 0x21, 0x20, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x00, 0x52, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x05, 0x11, 0x10, 0x01, 0x04, 0x21, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x03, 0x00, 0x07, 0x02, 0x71, 0x00, 0x05, 0xC9, 0xC3, 0x80, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0xD2, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x01, 0x00, 0x08, 0x02, 0x80, 0x00, 0xB0, 0x10, 0x0C, 0xE8, 0x00, 0x4E, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x06, 0x8D, 0xB9, 0x00, 0x00, 0x02, 0xC0, 0x08, 0x00, 0x12, 0x00, 0x69, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x01, 0x5C, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE0, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x11, 0x11, 0x11, 0x80, 0x1A, 0x20, 0x00, 0x00, 0x28, 0x0C, 0xA4, 0x23, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x45, 0x03, 0x00, 0x85, 0x01, 0x00, \
|
||||
0x08, 0x11, 0x20, 0x04, 0x4B, 0x06, 0x09, 0x10, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x94, 0x0D, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x03, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x04, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, \
|
||||
0x05, 0x11, 0x22, 0x01, 0x03, 0x1D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x2C, 0x0E, 0x0B, 0x04, 0x0C, 0x73, 0x03, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x3B, 0x0B, 0x00, 0x00, 0x20, 0xC5, 0x20, 0xFA, \
|
||||
0x08, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x17, 0x56, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x17, 0x13, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x01, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x07, 0x11, 0x01, 0x03, 0x00, 0x03, 0x33, 0x01, \
|
||||
0x08, 0x11, 0x02, 0x04, 0x00, 0x04, 0x06, 0x0A, 0x09, \
|
||||
0x0D, 0x11, 0x10, 0x09, 0x00, 0x10, 0x14, 0x00, 0xEF, 0x31, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0A, 0x11, 0x11, 0x06, 0x00, 0x02, 0x45, 0xD2, 0xCC, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x00, 0x04, 0x01, 0x08, 0xFF, 0xFF, 0x20, 0x02, 0x00, 0x2A, 0x01, 0x5A, 0x30, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x0C, 0x40, 0x00, 0x01, 0x06, 0x80, 0x00, 0x3F, 0x02, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x09, 0x11, 0x12, 0x05, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x08, 0x11, 0x12, 0x04, 0x36, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x03, 0x00, 0x07, 0x1E, 0x84, 0x80, 0x09, 0xC9, 0xC3, 0x80, 0x00, 0x28, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0xF6, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x01, 0x00, 0x08, 0x02, 0x80, 0x00, 0x10, 0x20, 0x00, 0xE8, 0x00, 0x4B, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x06, 0xD3, 0xA0, 0x06, 0xD4, 0x02, 0x00, 0x00, 0x00, 0x23, 0x8A, 0x3E, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x01, 0xA6, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE0, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x11, 0x10, 0x10, 0x80, 0x1A, 0x40, 0x00, 0x00, 0x28, 0x0C, 0xA4, 0x23, \
|
||||
0x0E, 0x11, 0x20, 0x0A, 0x45, 0x03, 0x01, 0x15, 0x01, 0x00, 0xFF, 0x06, 0x02, 0x18, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x84, 0x0D, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x04, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x08, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0xFF, 0xC4, 0x30, 0x7F, 0xF5, 0xB5, 0xB8, 0xDE, 0x05, 0x17, 0x16, 0x0C, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x03, 0x00, 0x15, 0xFF, 0x00, 0x00, 0xFF, 0xC4, 0x30, 0x7F, 0xF5, 0xB5, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xB8, 0xDE, 0x05, 0x17, 0x16, 0x0C, 0x03, 0x00, 0x15, 0xFF, 0x00, 0x00, \
|
||||
0x08, 0x11, 0x22, 0x04, 0x00, 0x08, 0x7F, 0x00, 0x1D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x34, 0x04, 0x0B, 0x04, 0x07, 0x70, 0x03, \
|
||||
0x10, 0x11, 0x30, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x39, 0x0B, 0x33, 0x33, 0x20, 0xC5, 0x20, 0xFA, \
|
||||
0x00 \
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
#define RADIO_CONFIGURATION_DATA_ARRAY_12 { \
|
||||
0x08, 0x04, 0x21, 0x71, 0x4B, 0x00, 0x00, 0xDC, 0x95, \
|
||||
0x08, 0x05, 0xA6, 0x22, 0x21, 0xF0, 0x41, 0x5B, 0x26, \
|
||||
0x08, 0xE2, 0x2F, 0x1C, 0xBB, 0x0A, 0xA8, 0x94, 0x28, \
|
||||
0x08, 0x05, 0x87, 0x67, 0xE2, 0x58, 0x1A, 0x07, 0x5B, \
|
||||
0x08, 0xE1, 0xD0, 0x72, 0xD8, 0x8A, 0xB8, 0x5B, 0x7D, \
|
||||
0x08, 0x05, 0x11, 0xEC, 0x9E, 0x28, 0x23, 0x1B, 0x6D, \
|
||||
0x08, 0xE2, 0x4F, 0x8A, 0xB2, 0xA9, 0x29, 0x14, 0x13, \
|
||||
0x08, 0x05, 0xD1, 0x2E, 0x71, 0x6A, 0x51, 0x4C, 0x2C, \
|
||||
0x08, 0xE5, 0x80, 0x27, 0x42, 0xA4, 0x69, 0xB0, 0x7F, \
|
||||
0x08, 0x05, 0xAA, 0x81, 0x2A, 0xBD, 0x45, 0xE8, 0xA8, \
|
||||
0x08, 0xEA, 0xE4, 0xF0, 0x24, 0xC9, 0x9F, 0xCC, 0x3C, \
|
||||
0x08, 0x05, 0x08, 0xF5, 0x05, 0x04, 0x27, 0x62, 0x98, \
|
||||
0x08, 0xEA, 0x6B, 0x62, 0x84, 0xA1, 0xF9, 0x4A, 0xE2, \
|
||||
0x08, 0x05, 0xE9, 0x77, 0x05, 0x4F, 0x84, 0xEE, 0x35, \
|
||||
0x08, 0xE2, 0x43, 0xC3, 0x8D, 0xFB, 0xAD, 0x54, 0x25, \
|
||||
0x08, 0x05, 0x14, 0x06, 0x5E, 0x39, 0x36, 0x2F, 0x45, \
|
||||
0x08, 0xEA, 0x0C, 0x1C, 0x74, 0xD0, 0x11, 0xFC, 0x32, \
|
||||
0x08, 0x05, 0xDA, 0x38, 0xBA, 0x0E, 0x3C, 0xE7, 0x8B, \
|
||||
0x08, 0xEA, 0xB0, 0x09, 0xE6, 0xFF, 0x94, 0xBB, 0xA9, \
|
||||
0x08, 0x05, 0xD7, 0x11, 0x29, 0xFE, 0xDC, 0x71, 0xD5, \
|
||||
0x08, 0xEA, 0x7F, 0x83, 0xA7, 0x60, 0x90, 0x62, 0x18, \
|
||||
0x08, 0x05, 0x84, 0x7F, 0x6A, 0xD1, 0x91, 0xC6, 0x52, \
|
||||
0x08, 0xEA, 0x2A, 0xD8, 0x7B, 0x8E, 0x4A, 0x9F, 0x91, \
|
||||
0x08, 0x05, 0xBD, 0xAA, 0x9D, 0x16, 0x18, 0x06, 0x15, \
|
||||
0x08, 0xE2, 0x55, 0xAD, 0x2D, 0x0A, 0x14, 0x1F, 0x5D, \
|
||||
0x08, 0x05, 0xD3, 0xE0, 0x7C, 0x39, 0xCF, 0x01, 0xF0, \
|
||||
0x08, 0xEF, 0x3A, 0x91, 0x72, 0x6A, 0x03, 0xBB, 0x96, \
|
||||
0x08, 0xE7, 0x83, 0x6D, 0xA4, 0x92, 0xFC, 0x13, 0xA7, \
|
||||
0x08, 0xEF, 0xF8, 0xFD, 0xCF, 0x62, 0x07, 0x6F, 0x1E, \
|
||||
0x08, 0xE7, 0x4C, 0xEA, 0x4A, 0x75, 0x4F, 0xD6, 0xCF, \
|
||||
0x08, 0xE2, 0xF6, 0x11, 0xE4, 0x26, 0x0D, 0x4D, 0xC6, \
|
||||
0x08, 0x05, 0xFB, 0xBF, 0xE8, 0x07, 0x89, 0xC3, 0x51, \
|
||||
0x08, 0xEF, 0x82, 0x27, 0x04, 0x3F, 0x96, 0xA8, 0x58, \
|
||||
0x08, 0xE7, 0x41, 0x29, 0x3C, 0x75, 0x2A, 0x03, 0x1C, \
|
||||
0x08, 0xEF, 0xAF, 0x59, 0x98, 0x36, 0xAA, 0x0F, 0x06, \
|
||||
0x08, 0xE6, 0xF6, 0x93, 0x41, 0x2D, 0xEC, 0x0E, 0x99, \
|
||||
0x08, 0x05, 0x29, 0x19, 0x90, 0xE5, 0xAA, 0x36, 0x40, \
|
||||
0x08, 0xE7, 0xFB, 0x68, 0x10, 0x7D, 0x77, 0x5D, 0xC0, \
|
||||
0x08, 0xE7, 0xCB, 0xB4, 0xDD, 0xCE, 0x90, 0x54, 0xBE, \
|
||||
0x08, 0xE7, 0x72, 0x8A, 0xD6, 0x02, 0xF4, 0xDD, 0xCC, \
|
||||
0x08, 0xE7, 0x6A, 0x21, 0x0B, 0x02, 0x86, 0xEC, 0x15, \
|
||||
0x08, 0xE7, 0x7B, 0x7C, 0x3D, 0x6B, 0x81, 0x03, 0xD0, \
|
||||
0x08, 0xEF, 0x7D, 0x61, 0x36, 0x94, 0x7C, 0xA0, 0xDF, \
|
||||
0x08, 0xEF, 0xCC, 0x85, 0x3B, 0xDA, 0xE0, 0x5C, 0x1C, \
|
||||
0x08, 0xE7, 0xE3, 0x75, 0xBB, 0x39, 0x22, 0x4B, 0xA8, \
|
||||
0x08, 0xEF, 0xF9, 0xCE, 0xE0, 0x5E, 0xEB, 0x1D, 0xCB, \
|
||||
0x08, 0xE7, 0xBD, 0xE2, 0x70, 0xD5, 0xAB, 0x4E, 0x3F, \
|
||||
0x08, 0xE7, 0xB7, 0x8D, 0x20, 0x68, 0x6B, 0x09, 0x52, \
|
||||
0x08, 0xEF, 0xA1, 0x1B, 0x90, 0xCD, 0x98, 0x00, 0x63, \
|
||||
0x08, 0xEF, 0x54, 0x67, 0x5D, 0x9C, 0x11, 0xFC, 0x45, \
|
||||
0x08, 0xE7, 0xD4, 0x9B, 0xC8, 0x97, 0xBE, 0x8A, 0x07, \
|
||||
0x08, 0xEF, 0x52, 0x8D, 0x90, 0x63, 0x73, 0xD5, 0x2A, \
|
||||
0x08, 0xEF, 0x03, 0xBC, 0x6E, 0x1C, 0x76, 0xBE, 0x4A, \
|
||||
0x08, 0xE7, 0xC2, 0xED, 0x67, 0xBA, 0x5E, 0x66, 0x21, \
|
||||
0x08, 0xEF, 0xE7, 0x3F, 0x87, 0xBE, 0xE0, 0x7A, 0x6D, \
|
||||
0x08, 0xE7, 0xC9, 0x70, 0x93, 0x1D, 0x64, 0xF5, 0x6C, \
|
||||
0x08, 0xEF, 0xF5, 0x28, 0x08, 0x34, 0xB3, 0xB6, 0x2C, \
|
||||
0x08, 0xEF, 0x3A, 0x0A, 0xEC, 0x0F, 0xDB, 0x56, 0xCA, \
|
||||
0x08, 0xEF, 0x39, 0xA0, 0x6E, 0xED, 0x79, 0xD0, 0x24, \
|
||||
0x08, 0xE7, 0x6C, 0x0B, 0xAF, 0xA9, 0x4E, 0x40, 0xB5, \
|
||||
0x08, 0xE9, 0xB9, 0xAF, 0xBF, 0x25, 0x50, 0xD1, 0x37, \
|
||||
0x08, 0x05, 0x9E, 0xDB, 0xDE, 0x3F, 0x94, 0xE9, 0x6B, \
|
||||
0x08, 0xEC, 0xC5, 0x05, 0xAA, 0x57, 0xDC, 0x8A, 0x5E, \
|
||||
0x08, 0x05, 0x70, 0xDA, 0x84, 0x84, 0xDD, 0xCA, 0x90, \
|
||||
0x07, 0x02, 0x81, 0x00, 0x01, 0xC9, 0xC3, 0x80, \
|
||||
0x08, 0x13, 0x00, 0x20, 0x21, 0x20, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x00, 0x52, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x05, 0x11, 0x10, 0x01, 0x04, 0x21, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x03, 0x00, 0x07, 0x02, 0x71, 0x00, 0x05, 0xC9, 0xC3, 0x80, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0x46, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x01, 0x00, 0x08, 0x03, 0x80, 0x00, 0xB0, 0x10, 0x0C, 0xE8, 0x00, 0x4E, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x06, 0x8D, 0xB9, 0x00, 0x00, 0x02, 0xC0, 0x08, 0x00, 0x12, 0x00, 0x23, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x01, 0x5C, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE0, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x11, 0x11, 0x11, 0x80, 0x1A, 0x20, 0x00, 0x00, 0x28, 0x0C, 0xA4, 0x23, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x45, 0x03, 0x00, 0x85, 0x01, 0x00, \
|
||||
0x08, 0x11, 0x20, 0x04, 0x4B, 0x06, 0x09, 0x10, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x94, 0x0A, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x03, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x04, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, \
|
||||
0x05, 0x11, 0x22, 0x01, 0x03, 0x1D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x2C, 0x0E, 0x0B, 0x04, 0x0C, 0x73, 0x03, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x37, 0x09, 0x00, 0x00, 0x0A, 0xEC, 0x20, 0xFE, \
|
||||
0x08, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x17, 0x56, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x17, 0x13, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x01, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x07, 0x11, 0x01, 0x03, 0x00, 0x03, 0x33, 0x01, \
|
||||
0x08, 0x11, 0x02, 0x04, 0x00, 0x04, 0x06, 0x0A, 0x09, \
|
||||
0x0D, 0x11, 0x10, 0x09, 0x00, 0x10, 0x14, 0x00, 0xEF, 0x31, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0A, 0x11, 0x11, 0x06, 0x00, 0x02, 0x45, 0xD2, 0xCC, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x00, 0x04, 0x01, 0x08, 0xFF, 0xFF, 0x20, 0x02, 0x00, 0x2A, 0x01, 0x5A, 0x30, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x0C, 0x40, 0x00, 0x01, 0x06, 0x80, 0x00, 0x3F, 0x02, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x09, 0x11, 0x12, 0x05, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x08, 0x11, 0x12, 0x04, 0x36, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x03, 0x00, 0x07, 0x36, 0xEE, 0x80, 0x09, 0xC9, 0xC3, 0x80, 0x00, 0x18, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0x93, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x01, 0x00, 0x08, 0x03, 0x80, 0x00, 0x00, 0x20, 0x00, 0xE8, 0x00, 0x53, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x06, 0x24, 0xDD, 0x06, 0x2B, 0x02, 0x00, 0x00, 0x00, 0x23, 0x8C, 0x4A, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x00, 0xD3, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE0, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x11, 0x12, 0x12, 0x80, 0x1A, 0x40, 0x00, 0x00, 0x28, 0x0C, 0xA4, 0x23, \
|
||||
0x0E, 0x11, 0x20, 0x0A, 0x45, 0x03, 0x00, 0xF9, 0x01, 0x00, 0xFF, 0x06, 0x02, 0x18, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x84, 0x0A, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x03, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x07, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0xCC, 0xA1, 0x30, 0xA0, 0x21, 0xD1, 0xB9, 0xC9, 0xEA, 0x05, 0x12, 0x11, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x0A, 0x04, 0x15, 0xFC, 0x03, 0x00, 0xCC, 0xA1, 0x30, 0xA0, 0x21, 0xD1, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xB9, 0xC9, 0xEA, 0x05, 0x12, 0x11, 0x0A, 0x04, 0x15, 0xFC, 0x03, 0x00, \
|
||||
0x08, 0x11, 0x22, 0x04, 0x00, 0x08, 0x7F, 0x00, 0x3D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x39, 0x04, 0x0B, 0x05, 0x04, 0x01, 0x03, \
|
||||
0x10, 0x11, 0x30, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x38, 0x0A, 0xAA, 0xAA, 0x0A, 0xEC, 0x20, 0xFE, \
|
||||
0x00 \
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
#define RADIO_CONFIGURATION_DATA_ARRAY_12 { \
|
||||
0x08, 0x04, 0x21, 0x71, 0x4B, 0x00, 0x00, 0xDC, 0x95, \
|
||||
0x08, 0x05, 0xA6, 0x22, 0x21, 0xF0, 0x41, 0x5B, 0x26, \
|
||||
0x08, 0xE2, 0x2F, 0x1C, 0xBB, 0x0A, 0xA8, 0x94, 0x28, \
|
||||
0x08, 0x05, 0x87, 0x67, 0xE2, 0x58, 0x1A, 0x07, 0x5B, \
|
||||
0x08, 0xE1, 0xD0, 0x72, 0xD8, 0x8A, 0xB8, 0x5B, 0x7D, \
|
||||
0x08, 0x05, 0x11, 0xEC, 0x9E, 0x28, 0x23, 0x1B, 0x6D, \
|
||||
0x08, 0xE2, 0x4F, 0x8A, 0xB2, 0xA9, 0x29, 0x14, 0x13, \
|
||||
0x08, 0x05, 0xD1, 0x2E, 0x71, 0x6A, 0x51, 0x4C, 0x2C, \
|
||||
0x08, 0xE5, 0x80, 0x27, 0x42, 0xA4, 0x69, 0xB0, 0x7F, \
|
||||
0x08, 0x05, 0xAA, 0x81, 0x2A, 0xBD, 0x45, 0xE8, 0xA8, \
|
||||
0x08, 0xEA, 0xE4, 0xF0, 0x24, 0xC9, 0x9F, 0xCC, 0x3C, \
|
||||
0x08, 0x05, 0x08, 0xF5, 0x05, 0x04, 0x27, 0x62, 0x98, \
|
||||
0x08, 0xEA, 0x6B, 0x62, 0x84, 0xA1, 0xF9, 0x4A, 0xE2, \
|
||||
0x08, 0x05, 0xE9, 0x77, 0x05, 0x4F, 0x84, 0xEE, 0x35, \
|
||||
0x08, 0xE2, 0x43, 0xC3, 0x8D, 0xFB, 0xAD, 0x54, 0x25, \
|
||||
0x08, 0x05, 0x14, 0x06, 0x5E, 0x39, 0x36, 0x2F, 0x45, \
|
||||
0x08, 0xEA, 0x0C, 0x1C, 0x74, 0xD0, 0x11, 0xFC, 0x32, \
|
||||
0x08, 0x05, 0xDA, 0x38, 0xBA, 0x0E, 0x3C, 0xE7, 0x8B, \
|
||||
0x08, 0xEA, 0xB0, 0x09, 0xE6, 0xFF, 0x94, 0xBB, 0xA9, \
|
||||
0x08, 0x05, 0xD7, 0x11, 0x29, 0xFE, 0xDC, 0x71, 0xD5, \
|
||||
0x08, 0xEA, 0x7F, 0x83, 0xA7, 0x60, 0x90, 0x62, 0x18, \
|
||||
0x08, 0x05, 0x84, 0x7F, 0x6A, 0xD1, 0x91, 0xC6, 0x52, \
|
||||
0x08, 0xEA, 0x2A, 0xD8, 0x7B, 0x8E, 0x4A, 0x9F, 0x91, \
|
||||
0x08, 0x05, 0xBD, 0xAA, 0x9D, 0x16, 0x18, 0x06, 0x15, \
|
||||
0x08, 0xE2, 0x55, 0xAD, 0x2D, 0x0A, 0x14, 0x1F, 0x5D, \
|
||||
0x08, 0x05, 0xD3, 0xE0, 0x7C, 0x39, 0xCF, 0x01, 0xF0, \
|
||||
0x08, 0xEF, 0x3A, 0x91, 0x72, 0x6A, 0x03, 0xBB, 0x96, \
|
||||
0x08, 0xE7, 0x83, 0x6D, 0xA4, 0x92, 0xFC, 0x13, 0xA7, \
|
||||
0x08, 0xEF, 0xF8, 0xFD, 0xCF, 0x62, 0x07, 0x6F, 0x1E, \
|
||||
0x08, 0xE7, 0x4C, 0xEA, 0x4A, 0x75, 0x4F, 0xD6, 0xCF, \
|
||||
0x08, 0xE2, 0xF6, 0x11, 0xE4, 0x26, 0x0D, 0x4D, 0xC6, \
|
||||
0x08, 0x05, 0xFB, 0xBF, 0xE8, 0x07, 0x89, 0xC3, 0x51, \
|
||||
0x08, 0xEF, 0x82, 0x27, 0x04, 0x3F, 0x96, 0xA8, 0x58, \
|
||||
0x08, 0xE7, 0x41, 0x29, 0x3C, 0x75, 0x2A, 0x03, 0x1C, \
|
||||
0x08, 0xEF, 0xAF, 0x59, 0x98, 0x36, 0xAA, 0x0F, 0x06, \
|
||||
0x08, 0xE6, 0xF6, 0x93, 0x41, 0x2D, 0xEC, 0x0E, 0x99, \
|
||||
0x08, 0x05, 0x29, 0x19, 0x90, 0xE5, 0xAA, 0x36, 0x40, \
|
||||
0x08, 0xE7, 0xFB, 0x68, 0x10, 0x7D, 0x77, 0x5D, 0xC0, \
|
||||
0x08, 0xE7, 0xCB, 0xB4, 0xDD, 0xCE, 0x90, 0x54, 0xBE, \
|
||||
0x08, 0xE7, 0x72, 0x8A, 0xD6, 0x02, 0xF4, 0xDD, 0xCC, \
|
||||
0x08, 0xE7, 0x6A, 0x21, 0x0B, 0x02, 0x86, 0xEC, 0x15, \
|
||||
0x08, 0xE7, 0x7B, 0x7C, 0x3D, 0x6B, 0x81, 0x03, 0xD0, \
|
||||
0x08, 0xEF, 0x7D, 0x61, 0x36, 0x94, 0x7C, 0xA0, 0xDF, \
|
||||
0x08, 0xEF, 0xCC, 0x85, 0x3B, 0xDA, 0xE0, 0x5C, 0x1C, \
|
||||
0x08, 0xE7, 0xE3, 0x75, 0xBB, 0x39, 0x22, 0x4B, 0xA8, \
|
||||
0x08, 0xEF, 0xF9, 0xCE, 0xE0, 0x5E, 0xEB, 0x1D, 0xCB, \
|
||||
0x08, 0xE7, 0xBD, 0xE2, 0x70, 0xD5, 0xAB, 0x4E, 0x3F, \
|
||||
0x08, 0xE7, 0xB7, 0x8D, 0x20, 0x68, 0x6B, 0x09, 0x52, \
|
||||
0x08, 0xEF, 0xA1, 0x1B, 0x90, 0xCD, 0x98, 0x00, 0x63, \
|
||||
0x08, 0xEF, 0x54, 0x67, 0x5D, 0x9C, 0x11, 0xFC, 0x45, \
|
||||
0x08, 0xE7, 0xD4, 0x9B, 0xC8, 0x97, 0xBE, 0x8A, 0x07, \
|
||||
0x08, 0xEF, 0x52, 0x8D, 0x90, 0x63, 0x73, 0xD5, 0x2A, \
|
||||
0x08, 0xEF, 0x03, 0xBC, 0x6E, 0x1C, 0x76, 0xBE, 0x4A, \
|
||||
0x08, 0xE7, 0xC2, 0xED, 0x67, 0xBA, 0x5E, 0x66, 0x21, \
|
||||
0x08, 0xEF, 0xE7, 0x3F, 0x87, 0xBE, 0xE0, 0x7A, 0x6D, \
|
||||
0x08, 0xE7, 0xC9, 0x70, 0x93, 0x1D, 0x64, 0xF5, 0x6C, \
|
||||
0x08, 0xEF, 0xF5, 0x28, 0x08, 0x34, 0xB3, 0xB6, 0x2C, \
|
||||
0x08, 0xEF, 0x3A, 0x0A, 0xEC, 0x0F, 0xDB, 0x56, 0xCA, \
|
||||
0x08, 0xEF, 0x39, 0xA0, 0x6E, 0xED, 0x79, 0xD0, 0x24, \
|
||||
0x08, 0xE7, 0x6C, 0x0B, 0xAF, 0xA9, 0x4E, 0x40, 0xB5, \
|
||||
0x08, 0xE9, 0xB9, 0xAF, 0xBF, 0x25, 0x50, 0xD1, 0x37, \
|
||||
0x08, 0x05, 0x9E, 0xDB, 0xDE, 0x3F, 0x94, 0xE9, 0x6B, \
|
||||
0x08, 0xEC, 0xC5, 0x05, 0xAA, 0x57, 0xDC, 0x8A, 0x5E, \
|
||||
0x08, 0x05, 0x70, 0xDA, 0x84, 0x84, 0xDD, 0xCA, 0x90, \
|
||||
0x07, 0x02, 0x81, 0x00, 0x01, 0xC9, 0xC3, 0x80, \
|
||||
0x08, 0x13, 0x00, 0x20, 0x21, 0x20, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x00, 0x52, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x05, 0x11, 0x10, 0x01, 0x04, 0x21, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x03, 0x00, 0x07, 0x02, 0x71, 0x00, 0x05, 0xC9, 0xC3, 0x80, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0xD2, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x01, 0x00, 0x08, 0x02, 0x80, 0x00, 0xB0, 0x10, 0x0C, 0xE8, 0x00, 0x4E, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x06, 0x8D, 0xB9, 0x00, 0x00, 0x02, 0xC0, 0x08, 0x00, 0x12, 0x00, 0x69, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x01, 0x5C, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE0, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x11, 0x11, 0x11, 0x80, 0x1A, 0x20, 0x00, 0x00, 0x28, 0x0C, 0xA4, 0x23, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x45, 0x03, 0x00, 0x85, 0x01, 0x00, \
|
||||
0x08, 0x11, 0x20, 0x04, 0x4B, 0x06, 0x09, 0x10, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x94, 0x0D, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x03, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x04, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, \
|
||||
0x05, 0x11, 0x22, 0x01, 0x03, 0x1D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x2C, 0x0E, 0x0B, 0x04, 0x0C, 0x73, 0x03, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x3B, 0x0B, 0x00, 0x00, 0x20, 0xC5, 0x20, 0xFA, \
|
||||
0x08, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x17, 0x56, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x17, 0x13, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x01, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x07, 0x11, 0x01, 0x03, 0x00, 0x03, 0x33, 0x01, \
|
||||
0x08, 0x11, 0x02, 0x04, 0x00, 0x04, 0x06, 0x0A, 0x09, \
|
||||
0x0D, 0x11, 0x10, 0x09, 0x00, 0x10, 0x14, 0x00, 0xEF, 0x31, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0A, 0x11, 0x11, 0x06, 0x00, 0x02, 0x45, 0xD2, 0xCC, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x00, 0x04, 0x01, 0x08, 0xFF, 0xFF, 0x20, 0x02, 0x00, 0x2A, 0x01, 0x5A, 0x30, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x0C, 0x40, 0x00, 0x01, 0x06, 0x80, 0x00, 0x3F, 0x02, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x09, 0x11, 0x12, 0x05, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x08, 0x11, 0x12, 0x04, 0x36, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x03, 0x00, 0x07, 0x36, 0xEE, 0x80, 0x09, 0xC9, 0xC3, 0x80, 0x00, 0x49, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0xBA, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x01, 0x00, 0x08, 0x02, 0x80, 0x00, 0x00, 0x20, 0x00, 0xE8, 0x00, 0x53, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x06, 0x24, 0xDD, 0x06, 0x2B, 0x02, 0x00, 0x00, 0x00, 0x23, 0x8F, 0xFF, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x01, 0xCD, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE0, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x11, 0x12, 0x12, 0x80, 0x1A, 0x40, 0x00, 0x00, 0x28, 0x0C, 0xA4, 0x23, \
|
||||
0x0E, 0x11, 0x20, 0x0A, 0x45, 0x03, 0x00, 0xF9, 0x01, 0x00, 0xFF, 0x06, 0x02, 0x18, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x84, 0x0D, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x03, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x07, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0xCC, 0xA1, 0x30, 0xA0, 0x21, 0xD1, 0xB9, 0xC9, 0xEA, 0x05, 0x12, 0x11, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x0A, 0x04, 0x15, 0xFC, 0x03, 0x00, 0xCC, 0xA1, 0x30, 0xA0, 0x21, 0xD1, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xB9, 0xC9, 0xEA, 0x05, 0x12, 0x11, 0x0A, 0x04, 0x15, 0xFC, 0x03, 0x00, \
|
||||
0x08, 0x11, 0x22, 0x04, 0x00, 0x08, 0x7F, 0x00, 0x3D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x39, 0x04, 0x0B, 0x05, 0x04, 0x01, 0x03, \
|
||||
0x10, 0x11, 0x30, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x39, 0x0B, 0x33, 0x33, 0x20, 0xC5, 0x20, 0xFA, \
|
||||
0x00 \
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
#define RADIO_CONFIGURATION_DATA_ARRAY_13 { \
|
||||
0x08, 0x04, 0x21, 0x71, 0x4B, 0x00, 0x00, 0xDC, 0x95, \
|
||||
0x08, 0x05, 0xA6, 0x22, 0x21, 0xF0, 0x41, 0x5B, 0x26, \
|
||||
0x08, 0xE2, 0x2F, 0x1C, 0xBB, 0x0A, 0xA8, 0x94, 0x28, \
|
||||
0x08, 0x05, 0x87, 0x67, 0xE2, 0x58, 0x1A, 0x07, 0x5B, \
|
||||
0x08, 0xE1, 0xD0, 0x72, 0xD8, 0x8A, 0xB8, 0x5B, 0x7D, \
|
||||
0x08, 0x05, 0x11, 0xEC, 0x9E, 0x28, 0x23, 0x1B, 0x6D, \
|
||||
0x08, 0xE2, 0x4F, 0x8A, 0xB2, 0xA9, 0x29, 0x14, 0x13, \
|
||||
0x08, 0x05, 0xD1, 0x2E, 0x71, 0x6A, 0x51, 0x4C, 0x2C, \
|
||||
0x08, 0xE5, 0x80, 0x27, 0x42, 0xA4, 0x69, 0xB0, 0x7F, \
|
||||
0x08, 0x05, 0xAA, 0x81, 0x2A, 0xBD, 0x45, 0xE8, 0xA8, \
|
||||
0x08, 0xEA, 0xE4, 0xF0, 0x24, 0xC9, 0x9F, 0xCC, 0x3C, \
|
||||
0x08, 0x05, 0x08, 0xF5, 0x05, 0x04, 0x27, 0x62, 0x98, \
|
||||
0x08, 0xEA, 0x6B, 0x62, 0x84, 0xA1, 0xF9, 0x4A, 0xE2, \
|
||||
0x08, 0x05, 0xE9, 0x77, 0x05, 0x4F, 0x84, 0xEE, 0x35, \
|
||||
0x08, 0xE2, 0x43, 0xC3, 0x8D, 0xFB, 0xAD, 0x54, 0x25, \
|
||||
0x08, 0x05, 0x14, 0x06, 0x5E, 0x39, 0x36, 0x2F, 0x45, \
|
||||
0x08, 0xEA, 0x0C, 0x1C, 0x74, 0xD0, 0x11, 0xFC, 0x32, \
|
||||
0x08, 0x05, 0xDA, 0x38, 0xBA, 0x0E, 0x3C, 0xE7, 0x8B, \
|
||||
0x08, 0xEA, 0xB0, 0x09, 0xE6, 0xFF, 0x94, 0xBB, 0xA9, \
|
||||
0x08, 0x05, 0xD7, 0x11, 0x29, 0xFE, 0xDC, 0x71, 0xD5, \
|
||||
0x08, 0xEA, 0x7F, 0x83, 0xA7, 0x60, 0x90, 0x62, 0x18, \
|
||||
0x08, 0x05, 0x84, 0x7F, 0x6A, 0xD1, 0x91, 0xC6, 0x52, \
|
||||
0x08, 0xEA, 0x2A, 0xD8, 0x7B, 0x8E, 0x4A, 0x9F, 0x91, \
|
||||
0x08, 0x05, 0xBD, 0xAA, 0x9D, 0x16, 0x18, 0x06, 0x15, \
|
||||
0x08, 0xE2, 0x55, 0xAD, 0x2D, 0x0A, 0x14, 0x1F, 0x5D, \
|
||||
0x08, 0x05, 0xD3, 0xE0, 0x7C, 0x39, 0xCF, 0x01, 0xF0, \
|
||||
0x08, 0xEF, 0x3A, 0x91, 0x72, 0x6A, 0x03, 0xBB, 0x96, \
|
||||
0x08, 0xE7, 0x83, 0x6D, 0xA4, 0x92, 0xFC, 0x13, 0xA7, \
|
||||
0x08, 0xEF, 0xF8, 0xFD, 0xCF, 0x62, 0x07, 0x6F, 0x1E, \
|
||||
0x08, 0xE7, 0x4C, 0xEA, 0x4A, 0x75, 0x4F, 0xD6, 0xCF, \
|
||||
0x08, 0xE2, 0xF6, 0x11, 0xE4, 0x26, 0x0D, 0x4D, 0xC6, \
|
||||
0x08, 0x05, 0xFB, 0xBF, 0xE8, 0x07, 0x89, 0xC3, 0x51, \
|
||||
0x08, 0xEF, 0x82, 0x27, 0x04, 0x3F, 0x96, 0xA8, 0x58, \
|
||||
0x08, 0xE7, 0x41, 0x29, 0x3C, 0x75, 0x2A, 0x03, 0x1C, \
|
||||
0x08, 0xEF, 0xAF, 0x59, 0x98, 0x36, 0xAA, 0x0F, 0x06, \
|
||||
0x08, 0xE6, 0xF6, 0x93, 0x41, 0x2D, 0xEC, 0x0E, 0x99, \
|
||||
0x08, 0x05, 0x29, 0x19, 0x90, 0xE5, 0xAA, 0x36, 0x40, \
|
||||
0x08, 0xE7, 0xFB, 0x68, 0x10, 0x7D, 0x77, 0x5D, 0xC0, \
|
||||
0x08, 0xE7, 0xCB, 0xB4, 0xDD, 0xCE, 0x90, 0x54, 0xBE, \
|
||||
0x08, 0xE7, 0x72, 0x8A, 0xD6, 0x02, 0xF4, 0xDD, 0xCC, \
|
||||
0x08, 0xE7, 0x6A, 0x21, 0x0B, 0x02, 0x86, 0xEC, 0x15, \
|
||||
0x08, 0xE7, 0x7B, 0x7C, 0x3D, 0x6B, 0x81, 0x03, 0xD0, \
|
||||
0x08, 0xEF, 0x7D, 0x61, 0x36, 0x94, 0x7C, 0xA0, 0xDF, \
|
||||
0x08, 0xEF, 0xCC, 0x85, 0x3B, 0xDA, 0xE0, 0x5C, 0x1C, \
|
||||
0x08, 0xE7, 0xE3, 0x75, 0xBB, 0x39, 0x22, 0x4B, 0xA8, \
|
||||
0x08, 0xEF, 0xF9, 0xCE, 0xE0, 0x5E, 0xEB, 0x1D, 0xCB, \
|
||||
0x08, 0xE7, 0xBD, 0xE2, 0x70, 0xD5, 0xAB, 0x4E, 0x3F, \
|
||||
0x08, 0xE7, 0xB7, 0x8D, 0x20, 0x68, 0x6B, 0x09, 0x52, \
|
||||
0x08, 0xEF, 0xA1, 0x1B, 0x90, 0xCD, 0x98, 0x00, 0x63, \
|
||||
0x08, 0xEF, 0x54, 0x67, 0x5D, 0x9C, 0x11, 0xFC, 0x45, \
|
||||
0x08, 0xE7, 0xD4, 0x9B, 0xC8, 0x97, 0xBE, 0x8A, 0x07, \
|
||||
0x08, 0xEF, 0x52, 0x8D, 0x90, 0x63, 0x73, 0xD5, 0x2A, \
|
||||
0x08, 0xEF, 0x03, 0xBC, 0x6E, 0x1C, 0x76, 0xBE, 0x4A, \
|
||||
0x08, 0xE7, 0xC2, 0xED, 0x67, 0xBA, 0x5E, 0x66, 0x21, \
|
||||
0x08, 0xEF, 0xE7, 0x3F, 0x87, 0xBE, 0xE0, 0x7A, 0x6D, \
|
||||
0x08, 0xE7, 0xC9, 0x70, 0x93, 0x1D, 0x64, 0xF5, 0x6C, \
|
||||
0x08, 0xEF, 0xF5, 0x28, 0x08, 0x34, 0xB3, 0xB6, 0x2C, \
|
||||
0x08, 0xEF, 0x3A, 0x0A, 0xEC, 0x0F, 0xDB, 0x56, 0xCA, \
|
||||
0x08, 0xEF, 0x39, 0xA0, 0x6E, 0xED, 0x79, 0xD0, 0x24, \
|
||||
0x08, 0xE7, 0x6C, 0x0B, 0xAF, 0xA9, 0x4E, 0x40, 0xB5, \
|
||||
0x08, 0xE9, 0xB9, 0xAF, 0xBF, 0x25, 0x50, 0xD1, 0x37, \
|
||||
0x08, 0x05, 0x9E, 0xDB, 0xDE, 0x3F, 0x94, 0xE9, 0x6B, \
|
||||
0x08, 0xEC, 0xC5, 0x05, 0xAA, 0x57, 0xDC, 0x8A, 0x5E, \
|
||||
0x08, 0x05, 0x70, 0xDA, 0x84, 0x84, 0xDD, 0xCA, 0x90, \
|
||||
0x07, 0x02, 0x81, 0x00, 0x01, 0xC9, 0xC3, 0x80, \
|
||||
0x08, 0x13, 0x00, 0x20, 0x21, 0x20, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x00, 0x52, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x05, 0x11, 0x10, 0x01, 0x04, 0x21, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x03, 0x00, 0x07, 0x02, 0x71, 0x00, 0x05, 0xC9, 0xC3, 0x80, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0x46, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x01, 0x00, 0x08, 0x03, 0x80, 0x00, 0xB0, 0x10, 0x0C, 0xE8, 0x00, 0x4E, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x06, 0x8D, 0xB9, 0x00, 0x00, 0x02, 0xC0, 0x08, 0x00, 0x12, 0x00, 0x23, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x01, 0x5C, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE0, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x11, 0x11, 0x11, 0x80, 0x1A, 0x20, 0x00, 0x00, 0x28, 0x0C, 0xA4, 0x23, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x45, 0x03, 0x00, 0x85, 0x01, 0x00, \
|
||||
0x08, 0x11, 0x20, 0x04, 0x4B, 0x06, 0x09, 0x10, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x94, 0x0A, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x03, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x04, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, \
|
||||
0x05, 0x11, 0x22, 0x01, 0x03, 0x1D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x2C, 0x0E, 0x0B, 0x04, 0x0C, 0x73, 0x03, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x37, 0x09, 0x00, 0x00, 0x0A, 0xEC, 0x20, 0xFE, \
|
||||
0x08, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x17, 0x56, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x17, 0x13, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x01, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x07, 0x11, 0x01, 0x03, 0x00, 0x03, 0x33, 0x01, \
|
||||
0x08, 0x11, 0x02, 0x04, 0x00, 0x04, 0x06, 0x0A, 0x09, \
|
||||
0x0D, 0x11, 0x10, 0x09, 0x00, 0x10, 0x14, 0x00, 0xEF, 0x31, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0A, 0x11, 0x11, 0x06, 0x00, 0x02, 0x45, 0xD2, 0xCC, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x00, 0x04, 0x01, 0x08, 0xFF, 0xFF, 0x20, 0x02, 0x00, 0x2A, 0x01, 0x5A, 0x30, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x0C, 0x40, 0x00, 0x01, 0x06, 0x80, 0x00, 0x3F, 0x02, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x09, 0x11, 0x12, 0x05, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x08, 0x11, 0x12, 0x04, 0x36, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x03, 0x00, 0x07, 0x2D, 0xC6, 0xC0, 0x01, 0xC9, 0xC3, 0x80, 0x00, 0x28, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0xF6, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x01, 0x00, 0x08, 0x03, 0x80, 0x00, 0x00, 0x30, 0x00, 0xE8, 0x00, 0x64, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x05, 0x1E, 0xB8, 0x05, 0x1F, 0x02, 0x00, 0x00, 0x00, 0x23, 0x8A, 0x3E, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x01, 0x9A, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE2, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x22, 0x0B, 0x0B, 0x80, 0x1A, 0x40, 0x00, 0x00, 0x28, 0x0C, 0xA4, 0x23, \
|
||||
0x0E, 0x11, 0x20, 0x0A, 0x45, 0x03, 0x00, 0xD0, 0x01, 0x00, 0xFF, 0x08, 0x02, 0x18, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x84, 0x0A, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x03, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x06, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, \
|
||||
0x08, 0x11, 0x22, 0x04, 0x00, 0x08, 0x7F, 0x00, 0x5D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x01, 0x05, 0x0B, 0x05, 0x02, 0x00, 0x03, \
|
||||
0x10, 0x11, 0x30, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x38, 0x0A, 0xAA, 0xAA, 0x0A, 0xEC, 0x20, 0xFE, \
|
||||
0x00 \
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
#define RADIO_CONFIGURATION_DATA_ARRAY_13 { \
|
||||
0x08, 0x04, 0x21, 0x71, 0x4B, 0x00, 0x00, 0xDC, 0x95, \
|
||||
0x08, 0x05, 0xA6, 0x22, 0x21, 0xF0, 0x41, 0x5B, 0x26, \
|
||||
0x08, 0xE2, 0x2F, 0x1C, 0xBB, 0x0A, 0xA8, 0x94, 0x28, \
|
||||
0x08, 0x05, 0x87, 0x67, 0xE2, 0x58, 0x1A, 0x07, 0x5B, \
|
||||
0x08, 0xE1, 0xD0, 0x72, 0xD8, 0x8A, 0xB8, 0x5B, 0x7D, \
|
||||
0x08, 0x05, 0x11, 0xEC, 0x9E, 0x28, 0x23, 0x1B, 0x6D, \
|
||||
0x08, 0xE2, 0x4F, 0x8A, 0xB2, 0xA9, 0x29, 0x14, 0x13, \
|
||||
0x08, 0x05, 0xD1, 0x2E, 0x71, 0x6A, 0x51, 0x4C, 0x2C, \
|
||||
0x08, 0xE5, 0x80, 0x27, 0x42, 0xA4, 0x69, 0xB0, 0x7F, \
|
||||
0x08, 0x05, 0xAA, 0x81, 0x2A, 0xBD, 0x45, 0xE8, 0xA8, \
|
||||
0x08, 0xEA, 0xE4, 0xF0, 0x24, 0xC9, 0x9F, 0xCC, 0x3C, \
|
||||
0x08, 0x05, 0x08, 0xF5, 0x05, 0x04, 0x27, 0x62, 0x98, \
|
||||
0x08, 0xEA, 0x6B, 0x62, 0x84, 0xA1, 0xF9, 0x4A, 0xE2, \
|
||||
0x08, 0x05, 0xE9, 0x77, 0x05, 0x4F, 0x84, 0xEE, 0x35, \
|
||||
0x08, 0xE2, 0x43, 0xC3, 0x8D, 0xFB, 0xAD, 0x54, 0x25, \
|
||||
0x08, 0x05, 0x14, 0x06, 0x5E, 0x39, 0x36, 0x2F, 0x45, \
|
||||
0x08, 0xEA, 0x0C, 0x1C, 0x74, 0xD0, 0x11, 0xFC, 0x32, \
|
||||
0x08, 0x05, 0xDA, 0x38, 0xBA, 0x0E, 0x3C, 0xE7, 0x8B, \
|
||||
0x08, 0xEA, 0xB0, 0x09, 0xE6, 0xFF, 0x94, 0xBB, 0xA9, \
|
||||
0x08, 0x05, 0xD7, 0x11, 0x29, 0xFE, 0xDC, 0x71, 0xD5, \
|
||||
0x08, 0xEA, 0x7F, 0x83, 0xA7, 0x60, 0x90, 0x62, 0x18, \
|
||||
0x08, 0x05, 0x84, 0x7F, 0x6A, 0xD1, 0x91, 0xC6, 0x52, \
|
||||
0x08, 0xEA, 0x2A, 0xD8, 0x7B, 0x8E, 0x4A, 0x9F, 0x91, \
|
||||
0x08, 0x05, 0xBD, 0xAA, 0x9D, 0x16, 0x18, 0x06, 0x15, \
|
||||
0x08, 0xE2, 0x55, 0xAD, 0x2D, 0x0A, 0x14, 0x1F, 0x5D, \
|
||||
0x08, 0x05, 0xD3, 0xE0, 0x7C, 0x39, 0xCF, 0x01, 0xF0, \
|
||||
0x08, 0xEF, 0x3A, 0x91, 0x72, 0x6A, 0x03, 0xBB, 0x96, \
|
||||
0x08, 0xE7, 0x83, 0x6D, 0xA4, 0x92, 0xFC, 0x13, 0xA7, \
|
||||
0x08, 0xEF, 0xF8, 0xFD, 0xCF, 0x62, 0x07, 0x6F, 0x1E, \
|
||||
0x08, 0xE7, 0x4C, 0xEA, 0x4A, 0x75, 0x4F, 0xD6, 0xCF, \
|
||||
0x08, 0xE2, 0xF6, 0x11, 0xE4, 0x26, 0x0D, 0x4D, 0xC6, \
|
||||
0x08, 0x05, 0xFB, 0xBF, 0xE8, 0x07, 0x89, 0xC3, 0x51, \
|
||||
0x08, 0xEF, 0x82, 0x27, 0x04, 0x3F, 0x96, 0xA8, 0x58, \
|
||||
0x08, 0xE7, 0x41, 0x29, 0x3C, 0x75, 0x2A, 0x03, 0x1C, \
|
||||
0x08, 0xEF, 0xAF, 0x59, 0x98, 0x36, 0xAA, 0x0F, 0x06, \
|
||||
0x08, 0xE6, 0xF6, 0x93, 0x41, 0x2D, 0xEC, 0x0E, 0x99, \
|
||||
0x08, 0x05, 0x29, 0x19, 0x90, 0xE5, 0xAA, 0x36, 0x40, \
|
||||
0x08, 0xE7, 0xFB, 0x68, 0x10, 0x7D, 0x77, 0x5D, 0xC0, \
|
||||
0x08, 0xE7, 0xCB, 0xB4, 0xDD, 0xCE, 0x90, 0x54, 0xBE, \
|
||||
0x08, 0xE7, 0x72, 0x8A, 0xD6, 0x02, 0xF4, 0xDD, 0xCC, \
|
||||
0x08, 0xE7, 0x6A, 0x21, 0x0B, 0x02, 0x86, 0xEC, 0x15, \
|
||||
0x08, 0xE7, 0x7B, 0x7C, 0x3D, 0x6B, 0x81, 0x03, 0xD0, \
|
||||
0x08, 0xEF, 0x7D, 0x61, 0x36, 0x94, 0x7C, 0xA0, 0xDF, \
|
||||
0x08, 0xEF, 0xCC, 0x85, 0x3B, 0xDA, 0xE0, 0x5C, 0x1C, \
|
||||
0x08, 0xE7, 0xE3, 0x75, 0xBB, 0x39, 0x22, 0x4B, 0xA8, \
|
||||
0x08, 0xEF, 0xF9, 0xCE, 0xE0, 0x5E, 0xEB, 0x1D, 0xCB, \
|
||||
0x08, 0xE7, 0xBD, 0xE2, 0x70, 0xD5, 0xAB, 0x4E, 0x3F, \
|
||||
0x08, 0xE7, 0xB7, 0x8D, 0x20, 0x68, 0x6B, 0x09, 0x52, \
|
||||
0x08, 0xEF, 0xA1, 0x1B, 0x90, 0xCD, 0x98, 0x00, 0x63, \
|
||||
0x08, 0xEF, 0x54, 0x67, 0x5D, 0x9C, 0x11, 0xFC, 0x45, \
|
||||
0x08, 0xE7, 0xD4, 0x9B, 0xC8, 0x97, 0xBE, 0x8A, 0x07, \
|
||||
0x08, 0xEF, 0x52, 0x8D, 0x90, 0x63, 0x73, 0xD5, 0x2A, \
|
||||
0x08, 0xEF, 0x03, 0xBC, 0x6E, 0x1C, 0x76, 0xBE, 0x4A, \
|
||||
0x08, 0xE7, 0xC2, 0xED, 0x67, 0xBA, 0x5E, 0x66, 0x21, \
|
||||
0x08, 0xEF, 0xE7, 0x3F, 0x87, 0xBE, 0xE0, 0x7A, 0x6D, \
|
||||
0x08, 0xE7, 0xC9, 0x70, 0x93, 0x1D, 0x64, 0xF5, 0x6C, \
|
||||
0x08, 0xEF, 0xF5, 0x28, 0x08, 0x34, 0xB3, 0xB6, 0x2C, \
|
||||
0x08, 0xEF, 0x3A, 0x0A, 0xEC, 0x0F, 0xDB, 0x56, 0xCA, \
|
||||
0x08, 0xEF, 0x39, 0xA0, 0x6E, 0xED, 0x79, 0xD0, 0x24, \
|
||||
0x08, 0xE7, 0x6C, 0x0B, 0xAF, 0xA9, 0x4E, 0x40, 0xB5, \
|
||||
0x08, 0xE9, 0xB9, 0xAF, 0xBF, 0x25, 0x50, 0xD1, 0x37, \
|
||||
0x08, 0x05, 0x9E, 0xDB, 0xDE, 0x3F, 0x94, 0xE9, 0x6B, \
|
||||
0x08, 0xEC, 0xC5, 0x05, 0xAA, 0x57, 0xDC, 0x8A, 0x5E, \
|
||||
0x08, 0x05, 0x70, 0xDA, 0x84, 0x84, 0xDD, 0xCA, 0x90, \
|
||||
0x07, 0x02, 0x81, 0x00, 0x01, 0xC9, 0xC3, 0x80, \
|
||||
0x08, 0x13, 0x00, 0x20, 0x21, 0x20, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x00, 0x52, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x05, 0x11, 0x10, 0x01, 0x04, 0x21, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x03, 0x00, 0x07, 0x02, 0x71, 0x00, 0x05, 0xC9, 0xC3, 0x80, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0xD2, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x01, 0x00, 0x08, 0x02, 0x80, 0x00, 0xB0, 0x10, 0x0C, 0xE8, 0x00, 0x4E, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x06, 0x8D, 0xB9, 0x00, 0x00, 0x02, 0xC0, 0x08, 0x00, 0x12, 0x00, 0x69, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x01, 0x5C, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE0, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x11, 0x11, 0x11, 0x80, 0x1A, 0x20, 0x00, 0x00, 0x28, 0x0C, 0xA4, 0x23, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x45, 0x03, 0x00, 0x85, 0x01, 0x00, \
|
||||
0x08, 0x11, 0x20, 0x04, 0x4B, 0x06, 0x09, 0x10, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x94, 0x0D, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x03, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x04, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, \
|
||||
0x05, 0x11, 0x22, 0x01, 0x03, 0x1D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x2C, 0x0E, 0x0B, 0x04, 0x0C, 0x73, 0x03, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x3B, 0x0B, 0x00, 0x00, 0x20, 0xC5, 0x20, 0xFA, \
|
||||
0x08, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x17, 0x56, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x17, 0x13, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x01, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x07, 0x11, 0x01, 0x03, 0x00, 0x03, 0x33, 0x01, \
|
||||
0x08, 0x11, 0x02, 0x04, 0x00, 0x04, 0x06, 0x0A, 0x09, \
|
||||
0x0D, 0x11, 0x10, 0x09, 0x00, 0x10, 0x14, 0x00, 0xEF, 0x31, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0A, 0x11, 0x11, 0x06, 0x00, 0x02, 0x45, 0xD2, 0xCC, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x00, 0x04, 0x01, 0x08, 0xFF, 0xFF, 0x20, 0x02, 0x00, 0x2A, 0x01, 0x5A, 0x30, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x0C, 0x40, 0x00, 0x01, 0x06, 0x80, 0x00, 0x3F, 0x02, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x09, 0x11, 0x12, 0x05, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x08, 0x11, 0x12, 0x04, 0x36, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x03, 0x00, 0x07, 0x2D, 0xC6, 0xC0, 0x01, 0xC9, 0xC3, 0x80, 0x00, 0x7A, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0xE1, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x01, 0x00, 0x08, 0x02, 0x80, 0x00, 0x00, 0x30, 0x00, 0xE8, 0x00, 0x64, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x05, 0x1E, 0xB8, 0x05, 0x1F, 0x02, 0x00, 0x00, 0x00, 0x23, 0x8F, 0xFF, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x02, 0xEB, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE2, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x22, 0x0B, 0x0B, 0x80, 0x1A, 0x40, 0x00, 0x00, 0x28, 0x0C, 0xA4, 0x23, \
|
||||
0x0E, 0x11, 0x20, 0x0A, 0x45, 0x03, 0x00, 0xD0, 0x01, 0x00, 0xFF, 0x08, 0x02, 0x18, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x84, 0x0D, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x03, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x06, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, \
|
||||
0x08, 0x11, 0x22, 0x04, 0x00, 0x08, 0x7F, 0x00, 0x5D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x01, 0x05, 0x0B, 0x05, 0x02, 0x00, 0x03, \
|
||||
0x10, 0x11, 0x30, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x39, 0x0B, 0x33, 0x33, 0x20, 0xC5, 0x20, 0xFA, \
|
||||
0x00 \
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
#define RADIO_CONFIGURATION_DATA_ARRAY_14 { \
|
||||
0x08, 0x04, 0x21, 0x71, 0x4B, 0x00, 0x00, 0xDC, 0x95, \
|
||||
0x08, 0x05, 0xA6, 0x22, 0x21, 0xF0, 0x41, 0x5B, 0x26, \
|
||||
0x08, 0xE2, 0x2F, 0x1C, 0xBB, 0x0A, 0xA8, 0x94, 0x28, \
|
||||
0x08, 0x05, 0x87, 0x67, 0xE2, 0x58, 0x1A, 0x07, 0x5B, \
|
||||
0x08, 0xE1, 0xD0, 0x72, 0xD8, 0x8A, 0xB8, 0x5B, 0x7D, \
|
||||
0x08, 0x05, 0x11, 0xEC, 0x9E, 0x28, 0x23, 0x1B, 0x6D, \
|
||||
0x08, 0xE2, 0x4F, 0x8A, 0xB2, 0xA9, 0x29, 0x14, 0x13, \
|
||||
0x08, 0x05, 0xD1, 0x2E, 0x71, 0x6A, 0x51, 0x4C, 0x2C, \
|
||||
0x08, 0xE5, 0x80, 0x27, 0x42, 0xA4, 0x69, 0xB0, 0x7F, \
|
||||
0x08, 0x05, 0xAA, 0x81, 0x2A, 0xBD, 0x45, 0xE8, 0xA8, \
|
||||
0x08, 0xEA, 0xE4, 0xF0, 0x24, 0xC9, 0x9F, 0xCC, 0x3C, \
|
||||
0x08, 0x05, 0x08, 0xF5, 0x05, 0x04, 0x27, 0x62, 0x98, \
|
||||
0x08, 0xEA, 0x6B, 0x62, 0x84, 0xA1, 0xF9, 0x4A, 0xE2, \
|
||||
0x08, 0x05, 0xE9, 0x77, 0x05, 0x4F, 0x84, 0xEE, 0x35, \
|
||||
0x08, 0xE2, 0x43, 0xC3, 0x8D, 0xFB, 0xAD, 0x54, 0x25, \
|
||||
0x08, 0x05, 0x14, 0x06, 0x5E, 0x39, 0x36, 0x2F, 0x45, \
|
||||
0x08, 0xEA, 0x0C, 0x1C, 0x74, 0xD0, 0x11, 0xFC, 0x32, \
|
||||
0x08, 0x05, 0xDA, 0x38, 0xBA, 0x0E, 0x3C, 0xE7, 0x8B, \
|
||||
0x08, 0xEA, 0xB0, 0x09, 0xE6, 0xFF, 0x94, 0xBB, 0xA9, \
|
||||
0x08, 0x05, 0xD7, 0x11, 0x29, 0xFE, 0xDC, 0x71, 0xD5, \
|
||||
0x08, 0xEA, 0x7F, 0x83, 0xA7, 0x60, 0x90, 0x62, 0x18, \
|
||||
0x08, 0x05, 0x84, 0x7F, 0x6A, 0xD1, 0x91, 0xC6, 0x52, \
|
||||
0x08, 0xEA, 0x2A, 0xD8, 0x7B, 0x8E, 0x4A, 0x9F, 0x91, \
|
||||
0x08, 0x05, 0xBD, 0xAA, 0x9D, 0x16, 0x18, 0x06, 0x15, \
|
||||
0x08, 0xE2, 0x55, 0xAD, 0x2D, 0x0A, 0x14, 0x1F, 0x5D, \
|
||||
0x08, 0x05, 0xD3, 0xE0, 0x7C, 0x39, 0xCF, 0x01, 0xF0, \
|
||||
0x08, 0xEF, 0x3A, 0x91, 0x72, 0x6A, 0x03, 0xBB, 0x96, \
|
||||
0x08, 0xE7, 0x83, 0x6D, 0xA4, 0x92, 0xFC, 0x13, 0xA7, \
|
||||
0x08, 0xEF, 0xF8, 0xFD, 0xCF, 0x62, 0x07, 0x6F, 0x1E, \
|
||||
0x08, 0xE7, 0x4C, 0xEA, 0x4A, 0x75, 0x4F, 0xD6, 0xCF, \
|
||||
0x08, 0xE2, 0xF6, 0x11, 0xE4, 0x26, 0x0D, 0x4D, 0xC6, \
|
||||
0x08, 0x05, 0xFB, 0xBF, 0xE8, 0x07, 0x89, 0xC3, 0x51, \
|
||||
0x08, 0xEF, 0x82, 0x27, 0x04, 0x3F, 0x96, 0xA8, 0x58, \
|
||||
0x08, 0xE7, 0x41, 0x29, 0x3C, 0x75, 0x2A, 0x03, 0x1C, \
|
||||
0x08, 0xEF, 0xAF, 0x59, 0x98, 0x36, 0xAA, 0x0F, 0x06, \
|
||||
0x08, 0xE6, 0xF6, 0x93, 0x41, 0x2D, 0xEC, 0x0E, 0x99, \
|
||||
0x08, 0x05, 0x29, 0x19, 0x90, 0xE5, 0xAA, 0x36, 0x40, \
|
||||
0x08, 0xE7, 0xFB, 0x68, 0x10, 0x7D, 0x77, 0x5D, 0xC0, \
|
||||
0x08, 0xE7, 0xCB, 0xB4, 0xDD, 0xCE, 0x90, 0x54, 0xBE, \
|
||||
0x08, 0xE7, 0x72, 0x8A, 0xD6, 0x02, 0xF4, 0xDD, 0xCC, \
|
||||
0x08, 0xE7, 0x6A, 0x21, 0x0B, 0x02, 0x86, 0xEC, 0x15, \
|
||||
0x08, 0xE7, 0x7B, 0x7C, 0x3D, 0x6B, 0x81, 0x03, 0xD0, \
|
||||
0x08, 0xEF, 0x7D, 0x61, 0x36, 0x94, 0x7C, 0xA0, 0xDF, \
|
||||
0x08, 0xEF, 0xCC, 0x85, 0x3B, 0xDA, 0xE0, 0x5C, 0x1C, \
|
||||
0x08, 0xE7, 0xE3, 0x75, 0xBB, 0x39, 0x22, 0x4B, 0xA8, \
|
||||
0x08, 0xEF, 0xF9, 0xCE, 0xE0, 0x5E, 0xEB, 0x1D, 0xCB, \
|
||||
0x08, 0xE7, 0xBD, 0xE2, 0x70, 0xD5, 0xAB, 0x4E, 0x3F, \
|
||||
0x08, 0xE7, 0xB7, 0x8D, 0x20, 0x68, 0x6B, 0x09, 0x52, \
|
||||
0x08, 0xEF, 0xA1, 0x1B, 0x90, 0xCD, 0x98, 0x00, 0x63, \
|
||||
0x08, 0xEF, 0x54, 0x67, 0x5D, 0x9C, 0x11, 0xFC, 0x45, \
|
||||
0x08, 0xE7, 0xD4, 0x9B, 0xC8, 0x97, 0xBE, 0x8A, 0x07, \
|
||||
0x08, 0xEF, 0x52, 0x8D, 0x90, 0x63, 0x73, 0xD5, 0x2A, \
|
||||
0x08, 0xEF, 0x03, 0xBC, 0x6E, 0x1C, 0x76, 0xBE, 0x4A, \
|
||||
0x08, 0xE7, 0xC2, 0xED, 0x67, 0xBA, 0x5E, 0x66, 0x21, \
|
||||
0x08, 0xEF, 0xE7, 0x3F, 0x87, 0xBE, 0xE0, 0x7A, 0x6D, \
|
||||
0x08, 0xE7, 0xC9, 0x70, 0x93, 0x1D, 0x64, 0xF5, 0x6C, \
|
||||
0x08, 0xEF, 0xF5, 0x28, 0x08, 0x34, 0xB3, 0xB6, 0x2C, \
|
||||
0x08, 0xEF, 0x3A, 0x0A, 0xEC, 0x0F, 0xDB, 0x56, 0xCA, \
|
||||
0x08, 0xEF, 0x39, 0xA0, 0x6E, 0xED, 0x79, 0xD0, 0x24, \
|
||||
0x08, 0xE7, 0x6C, 0x0B, 0xAF, 0xA9, 0x4E, 0x40, 0xB5, \
|
||||
0x08, 0xE9, 0xB9, 0xAF, 0xBF, 0x25, 0x50, 0xD1, 0x37, \
|
||||
0x08, 0x05, 0x9E, 0xDB, 0xDE, 0x3F, 0x94, 0xE9, 0x6B, \
|
||||
0x08, 0xEC, 0xC5, 0x05, 0xAA, 0x57, 0xDC, 0x8A, 0x5E, \
|
||||
0x08, 0x05, 0x70, 0xDA, 0x84, 0x84, 0xDD, 0xCA, 0x90, \
|
||||
0x07, 0x02, 0x81, 0x00, 0x01, 0xC9, 0xC3, 0x80, \
|
||||
0x08, 0x13, 0x00, 0x20, 0x21, 0x20, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x00, 0x52, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x05, 0x11, 0x10, 0x01, 0x04, 0x21, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x03, 0x00, 0x07, 0x02, 0x71, 0x00, 0x05, 0xC9, 0xC3, 0x80, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0x46, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x01, 0x00, 0x08, 0x03, 0x80, 0x00, 0xB0, 0x10, 0x0C, 0xE8, 0x00, 0x4E, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x06, 0x8D, 0xB9, 0x00, 0x00, 0x02, 0xC0, 0x08, 0x00, 0x12, 0x00, 0x23, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x01, 0x5C, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE0, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x11, 0x11, 0x11, 0x80, 0x1A, 0x20, 0x00, 0x00, 0x28, 0x0C, 0xA4, 0x23, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x45, 0x03, 0x00, 0x85, 0x01, 0x00, \
|
||||
0x08, 0x11, 0x20, 0x04, 0x4B, 0x06, 0x09, 0x10, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x94, 0x0A, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x03, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x04, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, \
|
||||
0x05, 0x11, 0x22, 0x01, 0x03, 0x1D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x2C, 0x0E, 0x0B, 0x04, 0x0C, 0x73, 0x03, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x37, 0x09, 0x00, 0x00, 0x0A, 0xEC, 0x20, 0xFE, \
|
||||
0x08, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x17, 0x56, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x17, 0x13, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x01, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x07, 0x11, 0x01, 0x03, 0x00, 0x03, 0x33, 0x01, \
|
||||
0x08, 0x11, 0x02, 0x04, 0x00, 0x04, 0x06, 0x0A, 0x09, \
|
||||
0x0D, 0x11, 0x10, 0x09, 0x00, 0x10, 0x14, 0x00, 0xFF, 0x31, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0A, 0x11, 0x11, 0x06, 0x00, 0x02, 0x45, 0xD2, 0xCC, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x00, 0x04, 0x01, 0x08, 0xFF, 0xFF, 0x20, 0x02, 0x00, 0x2A, 0x01, 0x5A, 0x30, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x0C, 0x40, 0x00, 0x01, 0x06, 0x80, 0x00, 0x3F, 0x02, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x09, 0x11, 0x12, 0x05, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x08, 0x11, 0x12, 0x04, 0x36, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x03, 0x00, 0x07, 0x4C, 0x4B, 0x40, 0x01, 0xC9, 0xC3, 0x80, 0x00, 0x44, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0x44, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x01, 0x00, 0x08, 0x03, 0x80, 0x00, 0x00, 0x30, 0x00, 0xE8, 0x00, 0x3C, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x08, 0x88, 0x89, 0x07, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x23, 0x8F, 0xFF, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x01, 0x76, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE2, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x22, 0x07, 0x07, 0x80, 0x1A, 0x40, 0x00, 0x00, 0x27, 0x0C, 0xA4, 0x23, \
|
||||
0x0E, 0x11, 0x20, 0x0A, 0x45, 0x03, 0x01, 0x5A, 0x01, 0x00, 0xFF, 0x08, 0x02, 0x18, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x84, 0x0A, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x04, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x0A, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0xFF, 0xC4, 0x30, 0x7F, 0xF5, 0xB5, 0xB8, 0xDE, 0x05, 0x17, 0x16, 0x0C, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x03, 0x00, 0x15, 0xFF, 0x00, 0x00, 0xFF, 0xC4, 0x30, 0x7F, 0xF5, 0xB5, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xB8, 0xDE, 0x05, 0x17, 0x16, 0x0C, 0x03, 0x00, 0x15, 0xFF, 0x00, 0x00, \
|
||||
0x08, 0x11, 0x22, 0x04, 0x00, 0x08, 0x7F, 0x00, 0x5D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x01, 0x05, 0x0B, 0x05, 0x02, 0x00, 0x03, \
|
||||
0x10, 0x11, 0x30, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x38, 0x0A, 0xAA, 0xAA, 0x0A, 0xEC, 0x20, 0xFE, \
|
||||
0x00 \
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
#define RADIO_CONFIGURATION_DATA_ARRAY_14 { \
|
||||
0x08, 0x04, 0x21, 0x71, 0x4B, 0x00, 0x00, 0xDC, 0x95, \
|
||||
0x08, 0x05, 0xA6, 0x22, 0x21, 0xF0, 0x41, 0x5B, 0x26, \
|
||||
0x08, 0xE2, 0x2F, 0x1C, 0xBB, 0x0A, 0xA8, 0x94, 0x28, \
|
||||
0x08, 0x05, 0x87, 0x67, 0xE2, 0x58, 0x1A, 0x07, 0x5B, \
|
||||
0x08, 0xE1, 0xD0, 0x72, 0xD8, 0x8A, 0xB8, 0x5B, 0x7D, \
|
||||
0x08, 0x05, 0x11, 0xEC, 0x9E, 0x28, 0x23, 0x1B, 0x6D, \
|
||||
0x08, 0xE2, 0x4F, 0x8A, 0xB2, 0xA9, 0x29, 0x14, 0x13, \
|
||||
0x08, 0x05, 0xD1, 0x2E, 0x71, 0x6A, 0x51, 0x4C, 0x2C, \
|
||||
0x08, 0xE5, 0x80, 0x27, 0x42, 0xA4, 0x69, 0xB0, 0x7F, \
|
||||
0x08, 0x05, 0xAA, 0x81, 0x2A, 0xBD, 0x45, 0xE8, 0xA8, \
|
||||
0x08, 0xEA, 0xE4, 0xF0, 0x24, 0xC9, 0x9F, 0xCC, 0x3C, \
|
||||
0x08, 0x05, 0x08, 0xF5, 0x05, 0x04, 0x27, 0x62, 0x98, \
|
||||
0x08, 0xEA, 0x6B, 0x62, 0x84, 0xA1, 0xF9, 0x4A, 0xE2, \
|
||||
0x08, 0x05, 0xE9, 0x77, 0x05, 0x4F, 0x84, 0xEE, 0x35, \
|
||||
0x08, 0xE2, 0x43, 0xC3, 0x8D, 0xFB, 0xAD, 0x54, 0x25, \
|
||||
0x08, 0x05, 0x14, 0x06, 0x5E, 0x39, 0x36, 0x2F, 0x45, \
|
||||
0x08, 0xEA, 0x0C, 0x1C, 0x74, 0xD0, 0x11, 0xFC, 0x32, \
|
||||
0x08, 0x05, 0xDA, 0x38, 0xBA, 0x0E, 0x3C, 0xE7, 0x8B, \
|
||||
0x08, 0xEA, 0xB0, 0x09, 0xE6, 0xFF, 0x94, 0xBB, 0xA9, \
|
||||
0x08, 0x05, 0xD7, 0x11, 0x29, 0xFE, 0xDC, 0x71, 0xD5, \
|
||||
0x08, 0xEA, 0x7F, 0x83, 0xA7, 0x60, 0x90, 0x62, 0x18, \
|
||||
0x08, 0x05, 0x84, 0x7F, 0x6A, 0xD1, 0x91, 0xC6, 0x52, \
|
||||
0x08, 0xEA, 0x2A, 0xD8, 0x7B, 0x8E, 0x4A, 0x9F, 0x91, \
|
||||
0x08, 0x05, 0xBD, 0xAA, 0x9D, 0x16, 0x18, 0x06, 0x15, \
|
||||
0x08, 0xE2, 0x55, 0xAD, 0x2D, 0x0A, 0x14, 0x1F, 0x5D, \
|
||||
0x08, 0x05, 0xD3, 0xE0, 0x7C, 0x39, 0xCF, 0x01, 0xF0, \
|
||||
0x08, 0xEF, 0x3A, 0x91, 0x72, 0x6A, 0x03, 0xBB, 0x96, \
|
||||
0x08, 0xE7, 0x83, 0x6D, 0xA4, 0x92, 0xFC, 0x13, 0xA7, \
|
||||
0x08, 0xEF, 0xF8, 0xFD, 0xCF, 0x62, 0x07, 0x6F, 0x1E, \
|
||||
0x08, 0xE7, 0x4C, 0xEA, 0x4A, 0x75, 0x4F, 0xD6, 0xCF, \
|
||||
0x08, 0xE2, 0xF6, 0x11, 0xE4, 0x26, 0x0D, 0x4D, 0xC6, \
|
||||
0x08, 0x05, 0xFB, 0xBF, 0xE8, 0x07, 0x89, 0xC3, 0x51, \
|
||||
0x08, 0xEF, 0x82, 0x27, 0x04, 0x3F, 0x96, 0xA8, 0x58, \
|
||||
0x08, 0xE7, 0x41, 0x29, 0x3C, 0x75, 0x2A, 0x03, 0x1C, \
|
||||
0x08, 0xEF, 0xAF, 0x59, 0x98, 0x36, 0xAA, 0x0F, 0x06, \
|
||||
0x08, 0xE6, 0xF6, 0x93, 0x41, 0x2D, 0xEC, 0x0E, 0x99, \
|
||||
0x08, 0x05, 0x29, 0x19, 0x90, 0xE5, 0xAA, 0x36, 0x40, \
|
||||
0x08, 0xE7, 0xFB, 0x68, 0x10, 0x7D, 0x77, 0x5D, 0xC0, \
|
||||
0x08, 0xE7, 0xCB, 0xB4, 0xDD, 0xCE, 0x90, 0x54, 0xBE, \
|
||||
0x08, 0xE7, 0x72, 0x8A, 0xD6, 0x02, 0xF4, 0xDD, 0xCC, \
|
||||
0x08, 0xE7, 0x6A, 0x21, 0x0B, 0x02, 0x86, 0xEC, 0x15, \
|
||||
0x08, 0xE7, 0x7B, 0x7C, 0x3D, 0x6B, 0x81, 0x03, 0xD0, \
|
||||
0x08, 0xEF, 0x7D, 0x61, 0x36, 0x94, 0x7C, 0xA0, 0xDF, \
|
||||
0x08, 0xEF, 0xCC, 0x85, 0x3B, 0xDA, 0xE0, 0x5C, 0x1C, \
|
||||
0x08, 0xE7, 0xE3, 0x75, 0xBB, 0x39, 0x22, 0x4B, 0xA8, \
|
||||
0x08, 0xEF, 0xF9, 0xCE, 0xE0, 0x5E, 0xEB, 0x1D, 0xCB, \
|
||||
0x08, 0xE7, 0xBD, 0xE2, 0x70, 0xD5, 0xAB, 0x4E, 0x3F, \
|
||||
0x08, 0xE7, 0xB7, 0x8D, 0x20, 0x68, 0x6B, 0x09, 0x52, \
|
||||
0x08, 0xEF, 0xA1, 0x1B, 0x90, 0xCD, 0x98, 0x00, 0x63, \
|
||||
0x08, 0xEF, 0x54, 0x67, 0x5D, 0x9C, 0x11, 0xFC, 0x45, \
|
||||
0x08, 0xE7, 0xD4, 0x9B, 0xC8, 0x97, 0xBE, 0x8A, 0x07, \
|
||||
0x08, 0xEF, 0x52, 0x8D, 0x90, 0x63, 0x73, 0xD5, 0x2A, \
|
||||
0x08, 0xEF, 0x03, 0xBC, 0x6E, 0x1C, 0x76, 0xBE, 0x4A, \
|
||||
0x08, 0xE7, 0xC2, 0xED, 0x67, 0xBA, 0x5E, 0x66, 0x21, \
|
||||
0x08, 0xEF, 0xE7, 0x3F, 0x87, 0xBE, 0xE0, 0x7A, 0x6D, \
|
||||
0x08, 0xE7, 0xC9, 0x70, 0x93, 0x1D, 0x64, 0xF5, 0x6C, \
|
||||
0x08, 0xEF, 0xF5, 0x28, 0x08, 0x34, 0xB3, 0xB6, 0x2C, \
|
||||
0x08, 0xEF, 0x3A, 0x0A, 0xEC, 0x0F, 0xDB, 0x56, 0xCA, \
|
||||
0x08, 0xEF, 0x39, 0xA0, 0x6E, 0xED, 0x79, 0xD0, 0x24, \
|
||||
0x08, 0xE7, 0x6C, 0x0B, 0xAF, 0xA9, 0x4E, 0x40, 0xB5, \
|
||||
0x08, 0xE9, 0xB9, 0xAF, 0xBF, 0x25, 0x50, 0xD1, 0x37, \
|
||||
0x08, 0x05, 0x9E, 0xDB, 0xDE, 0x3F, 0x94, 0xE9, 0x6B, \
|
||||
0x08, 0xEC, 0xC5, 0x05, 0xAA, 0x57, 0xDC, 0x8A, 0x5E, \
|
||||
0x08, 0x05, 0x70, 0xDA, 0x84, 0x84, 0xDD, 0xCA, 0x90, \
|
||||
0x07, 0x02, 0x81, 0x00, 0x01, 0xC9, 0xC3, 0x80, \
|
||||
0x08, 0x13, 0x00, 0x20, 0x21, 0x20, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x00, 0x52, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x05, 0x11, 0x10, 0x01, 0x04, 0x21, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x03, 0x00, 0x07, 0x02, 0x71, 0x00, 0x05, 0xC9, 0xC3, 0x80, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0xD2, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x01, 0x00, 0x08, 0x02, 0x80, 0x00, 0xB0, 0x10, 0x0C, 0xE8, 0x00, 0x4E, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x06, 0x8D, 0xB9, 0x00, 0x00, 0x02, 0xC0, 0x08, 0x00, 0x12, 0x00, 0x69, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x01, 0x5C, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE0, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x11, 0x11, 0x11, 0x80, 0x1A, 0x20, 0x00, 0x00, 0x28, 0x0C, 0xA4, 0x23, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x45, 0x03, 0x00, 0x85, 0x01, 0x00, \
|
||||
0x08, 0x11, 0x20, 0x04, 0x4B, 0x06, 0x09, 0x10, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x94, 0x0D, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x03, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x04, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, \
|
||||
0x05, 0x11, 0x22, 0x01, 0x03, 0x1D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x2C, 0x0E, 0x0B, 0x04, 0x0C, 0x73, 0x03, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x3B, 0x0B, 0x00, 0x00, 0x20, 0xC5, 0x20, 0xFA, \
|
||||
0x08, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x17, 0x56, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x17, 0x13, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x01, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x07, 0x11, 0x01, 0x03, 0x00, 0x03, 0x33, 0x01, \
|
||||
0x08, 0x11, 0x02, 0x04, 0x00, 0x04, 0x06, 0x0A, 0x09, \
|
||||
0x0D, 0x11, 0x10, 0x09, 0x00, 0x10, 0x14, 0x00, 0xFF, 0x31, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0A, 0x11, 0x11, 0x06, 0x00, 0x02, 0x45, 0xD2, 0xCC, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x00, 0x04, 0x01, 0x08, 0xFF, 0xFF, 0x20, 0x02, 0x00, 0x2A, 0x01, 0x5A, 0x30, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x0C, 0x40, 0x00, 0x01, 0x06, 0x80, 0x00, 0x3F, 0x02, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x09, 0x11, 0x12, 0x05, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x08, 0x11, 0x12, 0x04, 0x36, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x03, 0x00, 0x07, 0x4C, 0x4B, 0x40, 0x01, 0xC9, 0xC3, 0x80, 0x00, 0xCC, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0xCD, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x01, 0x00, 0x08, 0x02, 0x80, 0x00, 0x00, 0x30, 0x00, 0xE8, 0x00, 0x3C, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x08, 0x88, 0x89, 0x07, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x23, 0x8F, 0xFF, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x04, 0x61, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE2, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x22, 0x07, 0x07, 0x80, 0x1A, 0x40, 0x00, 0x00, 0x27, 0x0C, 0xA4, 0x23, \
|
||||
0x0E, 0x11, 0x20, 0x0A, 0x45, 0x03, 0x01, 0x5A, 0x01, 0x00, 0xFF, 0x08, 0x02, 0x18, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x84, 0x0D, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x04, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x0A, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0xFF, 0xC4, 0x30, 0x7F, 0xF5, 0xB5, 0xB8, 0xDE, 0x05, 0x17, 0x16, 0x0C, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x03, 0x00, 0x15, 0xFF, 0x00, 0x00, 0xFF, 0xC4, 0x30, 0x7F, 0xF5, 0xB5, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xB8, 0xDE, 0x05, 0x17, 0x16, 0x0C, 0x03, 0x00, 0x15, 0xFF, 0x00, 0x00, \
|
||||
0x08, 0x11, 0x22, 0x04, 0x00, 0x08, 0x7F, 0x00, 0x5D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x01, 0x05, 0x0B, 0x05, 0x02, 0x00, 0x03, \
|
||||
0x10, 0x11, 0x30, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x39, 0x0B, 0x33, 0x33, 0x20, 0xC5, 0x20, 0xFA, \
|
||||
0x00 \
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
#define RADIO_CONFIGURATION_DATA_ARRAY_20 { \
|
||||
0x08, 0x04, 0x21, 0x71, 0x4B, 0x00, 0x00, 0xDC, 0x95, \
|
||||
0x08, 0x05, 0xA6, 0x22, 0x21, 0xF0, 0x41, 0x5B, 0x26, \
|
||||
0x08, 0xE2, 0x2F, 0x1C, 0xBB, 0x0A, 0xA8, 0x94, 0x28, \
|
||||
0x08, 0x05, 0x87, 0x67, 0xE2, 0x58, 0x1A, 0x07, 0x5B, \
|
||||
0x08, 0xE1, 0xD0, 0x72, 0xD8, 0x8A, 0xB8, 0x5B, 0x7D, \
|
||||
0x08, 0x05, 0x11, 0xEC, 0x9E, 0x28, 0x23, 0x1B, 0x6D, \
|
||||
0x08, 0xE2, 0x4F, 0x8A, 0xB2, 0xA9, 0x29, 0x14, 0x13, \
|
||||
0x08, 0x05, 0xD1, 0x2E, 0x71, 0x6A, 0x51, 0x4C, 0x2C, \
|
||||
0x08, 0xE5, 0x80, 0x27, 0x42, 0xA4, 0x69, 0xB0, 0x7F, \
|
||||
0x08, 0x05, 0xAA, 0x81, 0x2A, 0xBD, 0x45, 0xE8, 0xA8, \
|
||||
0x08, 0xEA, 0xE4, 0xF0, 0x24, 0xC9, 0x9F, 0xCC, 0x3C, \
|
||||
0x08, 0x05, 0x08, 0xF5, 0x05, 0x04, 0x27, 0x62, 0x98, \
|
||||
0x08, 0xEA, 0x6B, 0x62, 0x84, 0xA1, 0xF9, 0x4A, 0xE2, \
|
||||
0x08, 0x05, 0xE9, 0x77, 0x05, 0x4F, 0x84, 0xEE, 0x35, \
|
||||
0x08, 0xE2, 0x43, 0xC3, 0x8D, 0xFB, 0xAD, 0x54, 0x25, \
|
||||
0x08, 0x05, 0x14, 0x06, 0x5E, 0x39, 0x36, 0x2F, 0x45, \
|
||||
0x08, 0xEA, 0x0C, 0x1C, 0x74, 0xD0, 0x11, 0xFC, 0x32, \
|
||||
0x08, 0x05, 0xDA, 0x38, 0xBA, 0x0E, 0x3C, 0xE7, 0x8B, \
|
||||
0x08, 0xEA, 0xB0, 0x09, 0xE6, 0xFF, 0x94, 0xBB, 0xA9, \
|
||||
0x08, 0x05, 0xD7, 0x11, 0x29, 0xFE, 0xDC, 0x71, 0xD5, \
|
||||
0x08, 0xEA, 0x7F, 0x83, 0xA7, 0x60, 0x90, 0x62, 0x18, \
|
||||
0x08, 0x05, 0x84, 0x7F, 0x6A, 0xD1, 0x91, 0xC6, 0x52, \
|
||||
0x08, 0xEA, 0x2A, 0xD8, 0x7B, 0x8E, 0x4A, 0x9F, 0x91, \
|
||||
0x08, 0x05, 0xBD, 0xAA, 0x9D, 0x16, 0x18, 0x06, 0x15, \
|
||||
0x08, 0xE2, 0x55, 0xAD, 0x2D, 0x0A, 0x14, 0x1F, 0x5D, \
|
||||
0x08, 0x05, 0xD3, 0xE0, 0x7C, 0x39, 0xCF, 0x01, 0xF0, \
|
||||
0x08, 0xEF, 0x3A, 0x91, 0x72, 0x6A, 0x03, 0xBB, 0x96, \
|
||||
0x08, 0xE7, 0x83, 0x6D, 0xA4, 0x92, 0xFC, 0x13, 0xA7, \
|
||||
0x08, 0xEF, 0xF8, 0xFD, 0xCF, 0x62, 0x07, 0x6F, 0x1E, \
|
||||
0x08, 0xE7, 0x4C, 0xEA, 0x4A, 0x75, 0x4F, 0xD6, 0xCF, \
|
||||
0x08, 0xE2, 0xF6, 0x11, 0xE4, 0x26, 0x0D, 0x4D, 0xC6, \
|
||||
0x08, 0x05, 0xFB, 0xBF, 0xE8, 0x07, 0x89, 0xC3, 0x51, \
|
||||
0x08, 0xEF, 0x82, 0x27, 0x04, 0x3F, 0x96, 0xA8, 0x58, \
|
||||
0x08, 0xE7, 0x41, 0x29, 0x3C, 0x75, 0x2A, 0x03, 0x1C, \
|
||||
0x08, 0xEF, 0xAF, 0x59, 0x98, 0x36, 0xAA, 0x0F, 0x06, \
|
||||
0x08, 0xE6, 0xF6, 0x93, 0x41, 0x2D, 0xEC, 0x0E, 0x99, \
|
||||
0x08, 0x05, 0x29, 0x19, 0x90, 0xE5, 0xAA, 0x36, 0x40, \
|
||||
0x08, 0xE7, 0xFB, 0x68, 0x10, 0x7D, 0x77, 0x5D, 0xC0, \
|
||||
0x08, 0xE7, 0xCB, 0xB4, 0xDD, 0xCE, 0x90, 0x54, 0xBE, \
|
||||
0x08, 0xE7, 0x72, 0x8A, 0xD6, 0x02, 0xF4, 0xDD, 0xCC, \
|
||||
0x08, 0xE7, 0x6A, 0x21, 0x0B, 0x02, 0x86, 0xEC, 0x15, \
|
||||
0x08, 0xE7, 0x7B, 0x7C, 0x3D, 0x6B, 0x81, 0x03, 0xD0, \
|
||||
0x08, 0xEF, 0x7D, 0x61, 0x36, 0x94, 0x7C, 0xA0, 0xDF, \
|
||||
0x08, 0xEF, 0xCC, 0x85, 0x3B, 0xDA, 0xE0, 0x5C, 0x1C, \
|
||||
0x08, 0xE7, 0xE3, 0x75, 0xBB, 0x39, 0x22, 0x4B, 0xA8, \
|
||||
0x08, 0xEF, 0xF9, 0xCE, 0xE0, 0x5E, 0xEB, 0x1D, 0xCB, \
|
||||
0x08, 0xE7, 0xBD, 0xE2, 0x70, 0xD5, 0xAB, 0x4E, 0x3F, \
|
||||
0x08, 0xE7, 0xB7, 0x8D, 0x20, 0x68, 0x6B, 0x09, 0x52, \
|
||||
0x08, 0xEF, 0xA1, 0x1B, 0x90, 0xCD, 0x98, 0x00, 0x63, \
|
||||
0x08, 0xEF, 0x54, 0x67, 0x5D, 0x9C, 0x11, 0xFC, 0x45, \
|
||||
0x08, 0xE7, 0xD4, 0x9B, 0xC8, 0x97, 0xBE, 0x8A, 0x07, \
|
||||
0x08, 0xEF, 0x52, 0x8D, 0x90, 0x63, 0x73, 0xD5, 0x2A, \
|
||||
0x08, 0xEF, 0x03, 0xBC, 0x6E, 0x1C, 0x76, 0xBE, 0x4A, \
|
||||
0x08, 0xE7, 0xC2, 0xED, 0x67, 0xBA, 0x5E, 0x66, 0x21, \
|
||||
0x08, 0xEF, 0xE7, 0x3F, 0x87, 0xBE, 0xE0, 0x7A, 0x6D, \
|
||||
0x08, 0xE7, 0xC9, 0x70, 0x93, 0x1D, 0x64, 0xF5, 0x6C, \
|
||||
0x08, 0xEF, 0xF5, 0x28, 0x08, 0x34, 0xB3, 0xB6, 0x2C, \
|
||||
0x08, 0xEF, 0x3A, 0x0A, 0xEC, 0x0F, 0xDB, 0x56, 0xCA, \
|
||||
0x08, 0xEF, 0x39, 0xA0, 0x6E, 0xED, 0x79, 0xD0, 0x24, \
|
||||
0x08, 0xE7, 0x6C, 0x0B, 0xAF, 0xA9, 0x4E, 0x40, 0xB5, \
|
||||
0x08, 0xE9, 0xB9, 0xAF, 0xBF, 0x25, 0x50, 0xD1, 0x37, \
|
||||
0x08, 0x05, 0x9E, 0xDB, 0xDE, 0x3F, 0x94, 0xE9, 0x6B, \
|
||||
0x08, 0xEC, 0xC5, 0x05, 0xAA, 0x57, 0xDC, 0x8A, 0x5E, \
|
||||
0x08, 0x05, 0x70, 0xDA, 0x84, 0x84, 0xDD, 0xCA, 0x90, \
|
||||
0x07, 0x02, 0x81, 0x00, 0x01, 0xC9, 0xC3, 0x80, \
|
||||
0x08, 0x13, 0x00, 0x20, 0x21, 0x20, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x00, 0x52, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x05, 0x11, 0x10, 0x01, 0x04, 0x21, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x03, 0x00, 0x07, 0x02, 0x71, 0x00, 0x05, 0xC9, 0xC3, 0x80, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0x46, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x01, 0x00, 0x08, 0x03, 0x80, 0x00, 0xB0, 0x10, 0x0C, 0xE8, 0x00, 0x4E, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x06, 0x8D, 0xB9, 0x00, 0x00, 0x02, 0xC0, 0x08, 0x00, 0x12, 0x00, 0x23, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x01, 0x5C, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE0, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x11, 0x11, 0x11, 0x80, 0x1A, 0x20, 0x00, 0x00, 0x28, 0x0C, 0xA4, 0x23, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x45, 0x03, 0x00, 0x85, 0x01, 0x00, \
|
||||
0x08, 0x11, 0x20, 0x04, 0x4B, 0x06, 0x09, 0x10, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x94, 0x0A, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x03, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x04, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, \
|
||||
0x05, 0x11, 0x22, 0x01, 0x03, 0x1D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x2C, 0x0E, 0x0B, 0x04, 0x0C, 0x73, 0x03, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x37, 0x09, 0x00, 0x00, 0x0A, 0xEC, 0x20, 0xFE, \
|
||||
0x08, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x17, 0x56, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x17, 0x13, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x01, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x07, 0x11, 0x01, 0x03, 0x00, 0x03, 0x33, 0x01, \
|
||||
0x08, 0x11, 0x02, 0x04, 0x00, 0x04, 0x06, 0x0A, 0x09, \
|
||||
0x0D, 0x11, 0x10, 0x09, 0x00, 0x10, 0x14, 0x00, 0xFF, 0x31, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0A, 0x11, 0x11, 0x06, 0x00, 0x0A, 0x45, 0xD2, 0xCC, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x00, 0x04, 0x01, 0x08, 0xFF, 0xFF, 0x20, 0x22, 0x00, 0x2A, 0x01, 0x5A, 0x30, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x0C, 0x40, 0x00, 0x01, 0x16, 0x80, 0x00, 0x3F, 0x12, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x09, 0x11, 0x12, 0x05, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x08, 0x11, 0x12, 0x04, 0x36, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x05, 0x00, 0x07, 0x0F, 0x42, 0x40, 0x09, 0xC9, 0xC3, 0x80, 0x00, 0x06, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0xD4, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x05, 0x00, 0x08, 0x03, 0x80, 0x00, 0x20, 0x20, 0x00, 0xE8, 0x00, 0x4B, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x06, 0xD3, 0xA0, 0x06, 0xD4, 0x02, 0x02, 0x00, 0x00, 0x12, 0x81, 0xB5, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x01, 0xCB, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE0, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x11, 0x10, 0x10, 0x00, 0x1A, 0x15, 0x55, 0x00, 0x28, 0x0C, 0xA4, 0x23, \
|
||||
0x0E, 0x11, 0x20, 0x0A, 0x45, 0x03, 0x01, 0x15, 0x01, 0x00, 0xFF, 0x06, 0x02, 0x18, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x84, 0x0A, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x04, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x08, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0xFF, 0xC4, 0x30, 0x7F, 0xF5, 0xB5, 0xB8, 0xDE, 0x05, 0x17, 0x16, 0x0C, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x03, 0x00, 0x15, 0xFF, 0x00, 0x00, 0xFF, 0xC4, 0x30, 0x7F, 0xF5, 0xB5, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xB8, 0xDE, 0x05, 0x17, 0x16, 0x0C, 0x03, 0x00, 0x15, 0xFF, 0x00, 0x00, \
|
||||
0x08, 0x11, 0x22, 0x04, 0x00, 0x08, 0x7F, 0x00, 0x1D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x2C, 0x0E, 0x0B, 0x04, 0x0C, 0x73, 0x03, \
|
||||
0x10, 0x11, 0x30, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x38, 0x0A, 0xAA, 0xAA, 0x0A, 0xEC, 0x20, 0xFE, \
|
||||
0x00 \
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
#define RADIO_CONFIGURATION_DATA_ARRAY_20 { \
|
||||
0x08, 0x04, 0x21, 0x71, 0x4B, 0x00, 0x00, 0xDC, 0x95, \
|
||||
0x08, 0x05, 0xA6, 0x22, 0x21, 0xF0, 0x41, 0x5B, 0x26, \
|
||||
0x08, 0xE2, 0x2F, 0x1C, 0xBB, 0x0A, 0xA8, 0x94, 0x28, \
|
||||
0x08, 0x05, 0x87, 0x67, 0xE2, 0x58, 0x1A, 0x07, 0x5B, \
|
||||
0x08, 0xE1, 0xD0, 0x72, 0xD8, 0x8A, 0xB8, 0x5B, 0x7D, \
|
||||
0x08, 0x05, 0x11, 0xEC, 0x9E, 0x28, 0x23, 0x1B, 0x6D, \
|
||||
0x08, 0xE2, 0x4F, 0x8A, 0xB2, 0xA9, 0x29, 0x14, 0x13, \
|
||||
0x08, 0x05, 0xD1, 0x2E, 0x71, 0x6A, 0x51, 0x4C, 0x2C, \
|
||||
0x08, 0xE5, 0x80, 0x27, 0x42, 0xA4, 0x69, 0xB0, 0x7F, \
|
||||
0x08, 0x05, 0xAA, 0x81, 0x2A, 0xBD, 0x45, 0xE8, 0xA8, \
|
||||
0x08, 0xEA, 0xE4, 0xF0, 0x24, 0xC9, 0x9F, 0xCC, 0x3C, \
|
||||
0x08, 0x05, 0x08, 0xF5, 0x05, 0x04, 0x27, 0x62, 0x98, \
|
||||
0x08, 0xEA, 0x6B, 0x62, 0x84, 0xA1, 0xF9, 0x4A, 0xE2, \
|
||||
0x08, 0x05, 0xE9, 0x77, 0x05, 0x4F, 0x84, 0xEE, 0x35, \
|
||||
0x08, 0xE2, 0x43, 0xC3, 0x8D, 0xFB, 0xAD, 0x54, 0x25, \
|
||||
0x08, 0x05, 0x14, 0x06, 0x5E, 0x39, 0x36, 0x2F, 0x45, \
|
||||
0x08, 0xEA, 0x0C, 0x1C, 0x74, 0xD0, 0x11, 0xFC, 0x32, \
|
||||
0x08, 0x05, 0xDA, 0x38, 0xBA, 0x0E, 0x3C, 0xE7, 0x8B, \
|
||||
0x08, 0xEA, 0xB0, 0x09, 0xE6, 0xFF, 0x94, 0xBB, 0xA9, \
|
||||
0x08, 0x05, 0xD7, 0x11, 0x29, 0xFE, 0xDC, 0x71, 0xD5, \
|
||||
0x08, 0xEA, 0x7F, 0x83, 0xA7, 0x60, 0x90, 0x62, 0x18, \
|
||||
0x08, 0x05, 0x84, 0x7F, 0x6A, 0xD1, 0x91, 0xC6, 0x52, \
|
||||
0x08, 0xEA, 0x2A, 0xD8, 0x7B, 0x8E, 0x4A, 0x9F, 0x91, \
|
||||
0x08, 0x05, 0xBD, 0xAA, 0x9D, 0x16, 0x18, 0x06, 0x15, \
|
||||
0x08, 0xE2, 0x55, 0xAD, 0x2D, 0x0A, 0x14, 0x1F, 0x5D, \
|
||||
0x08, 0x05, 0xD3, 0xE0, 0x7C, 0x39, 0xCF, 0x01, 0xF0, \
|
||||
0x08, 0xEF, 0x3A, 0x91, 0x72, 0x6A, 0x03, 0xBB, 0x96, \
|
||||
0x08, 0xE7, 0x83, 0x6D, 0xA4, 0x92, 0xFC, 0x13, 0xA7, \
|
||||
0x08, 0xEF, 0xF8, 0xFD, 0xCF, 0x62, 0x07, 0x6F, 0x1E, \
|
||||
0x08, 0xE7, 0x4C, 0xEA, 0x4A, 0x75, 0x4F, 0xD6, 0xCF, \
|
||||
0x08, 0xE2, 0xF6, 0x11, 0xE4, 0x26, 0x0D, 0x4D, 0xC6, \
|
||||
0x08, 0x05, 0xFB, 0xBF, 0xE8, 0x07, 0x89, 0xC3, 0x51, \
|
||||
0x08, 0xEF, 0x82, 0x27, 0x04, 0x3F, 0x96, 0xA8, 0x58, \
|
||||
0x08, 0xE7, 0x41, 0x29, 0x3C, 0x75, 0x2A, 0x03, 0x1C, \
|
||||
0x08, 0xEF, 0xAF, 0x59, 0x98, 0x36, 0xAA, 0x0F, 0x06, \
|
||||
0x08, 0xE6, 0xF6, 0x93, 0x41, 0x2D, 0xEC, 0x0E, 0x99, \
|
||||
0x08, 0x05, 0x29, 0x19, 0x90, 0xE5, 0xAA, 0x36, 0x40, \
|
||||
0x08, 0xE7, 0xFB, 0x68, 0x10, 0x7D, 0x77, 0x5D, 0xC0, \
|
||||
0x08, 0xE7, 0xCB, 0xB4, 0xDD, 0xCE, 0x90, 0x54, 0xBE, \
|
||||
0x08, 0xE7, 0x72, 0x8A, 0xD6, 0x02, 0xF4, 0xDD, 0xCC, \
|
||||
0x08, 0xE7, 0x6A, 0x21, 0x0B, 0x02, 0x86, 0xEC, 0x15, \
|
||||
0x08, 0xE7, 0x7B, 0x7C, 0x3D, 0x6B, 0x81, 0x03, 0xD0, \
|
||||
0x08, 0xEF, 0x7D, 0x61, 0x36, 0x94, 0x7C, 0xA0, 0xDF, \
|
||||
0x08, 0xEF, 0xCC, 0x85, 0x3B, 0xDA, 0xE0, 0x5C, 0x1C, \
|
||||
0x08, 0xE7, 0xE3, 0x75, 0xBB, 0x39, 0x22, 0x4B, 0xA8, \
|
||||
0x08, 0xEF, 0xF9, 0xCE, 0xE0, 0x5E, 0xEB, 0x1D, 0xCB, \
|
||||
0x08, 0xE7, 0xBD, 0xE2, 0x70, 0xD5, 0xAB, 0x4E, 0x3F, \
|
||||
0x08, 0xE7, 0xB7, 0x8D, 0x20, 0x68, 0x6B, 0x09, 0x52, \
|
||||
0x08, 0xEF, 0xA1, 0x1B, 0x90, 0xCD, 0x98, 0x00, 0x63, \
|
||||
0x08, 0xEF, 0x54, 0x67, 0x5D, 0x9C, 0x11, 0xFC, 0x45, \
|
||||
0x08, 0xE7, 0xD4, 0x9B, 0xC8, 0x97, 0xBE, 0x8A, 0x07, \
|
||||
0x08, 0xEF, 0x52, 0x8D, 0x90, 0x63, 0x73, 0xD5, 0x2A, \
|
||||
0x08, 0xEF, 0x03, 0xBC, 0x6E, 0x1C, 0x76, 0xBE, 0x4A, \
|
||||
0x08, 0xE7, 0xC2, 0xED, 0x67, 0xBA, 0x5E, 0x66, 0x21, \
|
||||
0x08, 0xEF, 0xE7, 0x3F, 0x87, 0xBE, 0xE0, 0x7A, 0x6D, \
|
||||
0x08, 0xE7, 0xC9, 0x70, 0x93, 0x1D, 0x64, 0xF5, 0x6C, \
|
||||
0x08, 0xEF, 0xF5, 0x28, 0x08, 0x34, 0xB3, 0xB6, 0x2C, \
|
||||
0x08, 0xEF, 0x3A, 0x0A, 0xEC, 0x0F, 0xDB, 0x56, 0xCA, \
|
||||
0x08, 0xEF, 0x39, 0xA0, 0x6E, 0xED, 0x79, 0xD0, 0x24, \
|
||||
0x08, 0xE7, 0x6C, 0x0B, 0xAF, 0xA9, 0x4E, 0x40, 0xB5, \
|
||||
0x08, 0xE9, 0xB9, 0xAF, 0xBF, 0x25, 0x50, 0xD1, 0x37, \
|
||||
0x08, 0x05, 0x9E, 0xDB, 0xDE, 0x3F, 0x94, 0xE9, 0x6B, \
|
||||
0x08, 0xEC, 0xC5, 0x05, 0xAA, 0x57, 0xDC, 0x8A, 0x5E, \
|
||||
0x08, 0x05, 0x70, 0xDA, 0x84, 0x84, 0xDD, 0xCA, 0x90, \
|
||||
0x07, 0x02, 0x81, 0x00, 0x01, 0xC9, 0xC3, 0x80, \
|
||||
0x08, 0x13, 0x00, 0x20, 0x21, 0x20, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x00, 0x52, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x05, 0x11, 0x10, 0x01, 0x04, 0x21, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x03, 0x00, 0x07, 0x02, 0x71, 0x00, 0x05, 0xC9, 0xC3, 0x80, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0xD2, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x01, 0x00, 0x08, 0x02, 0x80, 0x00, 0xB0, 0x10, 0x0C, 0xE8, 0x00, 0x4E, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x06, 0x8D, 0xB9, 0x00, 0x00, 0x02, 0xC0, 0x08, 0x00, 0x12, 0x00, 0x69, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x01, 0x5C, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE0, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x11, 0x11, 0x11, 0x80, 0x1A, 0x20, 0x00, 0x00, 0x28, 0x0C, 0xA4, 0x23, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x45, 0x03, 0x00, 0x85, 0x01, 0x00, \
|
||||
0x08, 0x11, 0x20, 0x04, 0x4B, 0x06, 0x09, 0x10, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x94, 0x0D, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x03, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x04, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, \
|
||||
0x05, 0x11, 0x22, 0x01, 0x03, 0x1D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x2C, 0x0E, 0x0B, 0x04, 0x0C, 0x73, 0x03, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x3B, 0x0B, 0x00, 0x00, 0x20, 0xC5, 0x20, 0xFA, \
|
||||
0x08, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x17, 0x56, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x17, 0x13, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x01, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x07, 0x11, 0x01, 0x03, 0x00, 0x03, 0x33, 0x01, \
|
||||
0x08, 0x11, 0x02, 0x04, 0x00, 0x04, 0x06, 0x0A, 0x09, \
|
||||
0x0D, 0x11, 0x10, 0x09, 0x00, 0x10, 0x14, 0x00, 0xFF, 0x31, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0A, 0x11, 0x11, 0x06, 0x00, 0x0A, 0x45, 0xD2, 0xCC, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x00, 0x04, 0x01, 0x08, 0xFF, 0xFF, 0x20, 0x22, 0x00, 0x2A, 0x01, 0x5A, 0x30, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x0C, 0x40, 0x00, 0x01, 0x16, 0x80, 0x00, 0x3F, 0x12, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x09, 0x11, 0x12, 0x05, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x08, 0x11, 0x12, 0x04, 0x36, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x05, 0x00, 0x07, 0x0F, 0x42, 0x40, 0x09, 0xC9, 0xC3, 0x80, 0x00, 0x14, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0x7B, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x05, 0x00, 0x08, 0x02, 0x80, 0x00, 0x20, 0x20, 0x00, 0xE8, 0x00, 0x4B, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x06, 0xD3, 0xA0, 0x06, 0xD4, 0x02, 0x02, 0x00, 0x00, 0x12, 0x85, 0x1F, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x01, 0xCB, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE0, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x11, 0x10, 0x10, 0x00, 0x1A, 0x15, 0x55, 0x00, 0x28, 0x0C, 0xA4, 0x23, \
|
||||
0x0E, 0x11, 0x20, 0x0A, 0x45, 0x03, 0x01, 0x15, 0x01, 0x00, 0xFF, 0x06, 0x02, 0x18, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x84, 0x0D, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x04, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x08, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0xFF, 0xC4, 0x30, 0x7F, 0xF5, 0xB5, 0xB8, 0xDE, 0x05, 0x17, 0x16, 0x0C, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x03, 0x00, 0x15, 0xFF, 0x00, 0x00, 0xFF, 0xC4, 0x30, 0x7F, 0xF5, 0xB5, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xB8, 0xDE, 0x05, 0x17, 0x16, 0x0C, 0x03, 0x00, 0x15, 0xFF, 0x00, 0x00, \
|
||||
0x08, 0x11, 0x22, 0x04, 0x00, 0x08, 0x7F, 0x00, 0x1D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x2C, 0x0E, 0x0B, 0x04, 0x0C, 0x73, 0x03, \
|
||||
0x10, 0x11, 0x30, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x39, 0x0B, 0x33, 0x33, 0x20, 0xC5, 0x20, 0xFA, \
|
||||
0x00 \
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
#define RADIO_CONFIGURATION_DATA_ARRAY_21 { \
|
||||
0x08, 0x04, 0x21, 0x71, 0x4B, 0x00, 0x00, 0xDC, 0x95, \
|
||||
0x08, 0x05, 0xA6, 0x22, 0x21, 0xF0, 0x41, 0x5B, 0x26, \
|
||||
0x08, 0xE2, 0x2F, 0x1C, 0xBB, 0x0A, 0xA8, 0x94, 0x28, \
|
||||
0x08, 0x05, 0x87, 0x67, 0xE2, 0x58, 0x1A, 0x07, 0x5B, \
|
||||
0x08, 0xE1, 0xD0, 0x72, 0xD8, 0x8A, 0xB8, 0x5B, 0x7D, \
|
||||
0x08, 0x05, 0x11, 0xEC, 0x9E, 0x28, 0x23, 0x1B, 0x6D, \
|
||||
0x08, 0xE2, 0x4F, 0x8A, 0xB2, 0xA9, 0x29, 0x14, 0x13, \
|
||||
0x08, 0x05, 0xD1, 0x2E, 0x71, 0x6A, 0x51, 0x4C, 0x2C, \
|
||||
0x08, 0xE5, 0x80, 0x27, 0x42, 0xA4, 0x69, 0xB0, 0x7F, \
|
||||
0x08, 0x05, 0xAA, 0x81, 0x2A, 0xBD, 0x45, 0xE8, 0xA8, \
|
||||
0x08, 0xEA, 0xE4, 0xF0, 0x24, 0xC9, 0x9F, 0xCC, 0x3C, \
|
||||
0x08, 0x05, 0x08, 0xF5, 0x05, 0x04, 0x27, 0x62, 0x98, \
|
||||
0x08, 0xEA, 0x6B, 0x62, 0x84, 0xA1, 0xF9, 0x4A, 0xE2, \
|
||||
0x08, 0x05, 0xE9, 0x77, 0x05, 0x4F, 0x84, 0xEE, 0x35, \
|
||||
0x08, 0xE2, 0x43, 0xC3, 0x8D, 0xFB, 0xAD, 0x54, 0x25, \
|
||||
0x08, 0x05, 0x14, 0x06, 0x5E, 0x39, 0x36, 0x2F, 0x45, \
|
||||
0x08, 0xEA, 0x0C, 0x1C, 0x74, 0xD0, 0x11, 0xFC, 0x32, \
|
||||
0x08, 0x05, 0xDA, 0x38, 0xBA, 0x0E, 0x3C, 0xE7, 0x8B, \
|
||||
0x08, 0xEA, 0xB0, 0x09, 0xE6, 0xFF, 0x94, 0xBB, 0xA9, \
|
||||
0x08, 0x05, 0xD7, 0x11, 0x29, 0xFE, 0xDC, 0x71, 0xD5, \
|
||||
0x08, 0xEA, 0x7F, 0x83, 0xA7, 0x60, 0x90, 0x62, 0x18, \
|
||||
0x08, 0x05, 0x84, 0x7F, 0x6A, 0xD1, 0x91, 0xC6, 0x52, \
|
||||
0x08, 0xEA, 0x2A, 0xD8, 0x7B, 0x8E, 0x4A, 0x9F, 0x91, \
|
||||
0x08, 0x05, 0xBD, 0xAA, 0x9D, 0x16, 0x18, 0x06, 0x15, \
|
||||
0x08, 0xE2, 0x55, 0xAD, 0x2D, 0x0A, 0x14, 0x1F, 0x5D, \
|
||||
0x08, 0x05, 0xD3, 0xE0, 0x7C, 0x39, 0xCF, 0x01, 0xF0, \
|
||||
0x08, 0xEF, 0x3A, 0x91, 0x72, 0x6A, 0x03, 0xBB, 0x96, \
|
||||
0x08, 0xE7, 0x83, 0x6D, 0xA4, 0x92, 0xFC, 0x13, 0xA7, \
|
||||
0x08, 0xEF, 0xF8, 0xFD, 0xCF, 0x62, 0x07, 0x6F, 0x1E, \
|
||||
0x08, 0xE7, 0x4C, 0xEA, 0x4A, 0x75, 0x4F, 0xD6, 0xCF, \
|
||||
0x08, 0xE2, 0xF6, 0x11, 0xE4, 0x26, 0x0D, 0x4D, 0xC6, \
|
||||
0x08, 0x05, 0xFB, 0xBF, 0xE8, 0x07, 0x89, 0xC3, 0x51, \
|
||||
0x08, 0xEF, 0x82, 0x27, 0x04, 0x3F, 0x96, 0xA8, 0x58, \
|
||||
0x08, 0xE7, 0x41, 0x29, 0x3C, 0x75, 0x2A, 0x03, 0x1C, \
|
||||
0x08, 0xEF, 0xAF, 0x59, 0x98, 0x36, 0xAA, 0x0F, 0x06, \
|
||||
0x08, 0xE6, 0xF6, 0x93, 0x41, 0x2D, 0xEC, 0x0E, 0x99, \
|
||||
0x08, 0x05, 0x29, 0x19, 0x90, 0xE5, 0xAA, 0x36, 0x40, \
|
||||
0x08, 0xE7, 0xFB, 0x68, 0x10, 0x7D, 0x77, 0x5D, 0xC0, \
|
||||
0x08, 0xE7, 0xCB, 0xB4, 0xDD, 0xCE, 0x90, 0x54, 0xBE, \
|
||||
0x08, 0xE7, 0x72, 0x8A, 0xD6, 0x02, 0xF4, 0xDD, 0xCC, \
|
||||
0x08, 0xE7, 0x6A, 0x21, 0x0B, 0x02, 0x86, 0xEC, 0x15, \
|
||||
0x08, 0xE7, 0x7B, 0x7C, 0x3D, 0x6B, 0x81, 0x03, 0xD0, \
|
||||
0x08, 0xEF, 0x7D, 0x61, 0x36, 0x94, 0x7C, 0xA0, 0xDF, \
|
||||
0x08, 0xEF, 0xCC, 0x85, 0x3B, 0xDA, 0xE0, 0x5C, 0x1C, \
|
||||
0x08, 0xE7, 0xE3, 0x75, 0xBB, 0x39, 0x22, 0x4B, 0xA8, \
|
||||
0x08, 0xEF, 0xF9, 0xCE, 0xE0, 0x5E, 0xEB, 0x1D, 0xCB, \
|
||||
0x08, 0xE7, 0xBD, 0xE2, 0x70, 0xD5, 0xAB, 0x4E, 0x3F, \
|
||||
0x08, 0xE7, 0xB7, 0x8D, 0x20, 0x68, 0x6B, 0x09, 0x52, \
|
||||
0x08, 0xEF, 0xA1, 0x1B, 0x90, 0xCD, 0x98, 0x00, 0x63, \
|
||||
0x08, 0xEF, 0x54, 0x67, 0x5D, 0x9C, 0x11, 0xFC, 0x45, \
|
||||
0x08, 0xE7, 0xD4, 0x9B, 0xC8, 0x97, 0xBE, 0x8A, 0x07, \
|
||||
0x08, 0xEF, 0x52, 0x8D, 0x90, 0x63, 0x73, 0xD5, 0x2A, \
|
||||
0x08, 0xEF, 0x03, 0xBC, 0x6E, 0x1C, 0x76, 0xBE, 0x4A, \
|
||||
0x08, 0xE7, 0xC2, 0xED, 0x67, 0xBA, 0x5E, 0x66, 0x21, \
|
||||
0x08, 0xEF, 0xE7, 0x3F, 0x87, 0xBE, 0xE0, 0x7A, 0x6D, \
|
||||
0x08, 0xE7, 0xC9, 0x70, 0x93, 0x1D, 0x64, 0xF5, 0x6C, \
|
||||
0x08, 0xEF, 0xF5, 0x28, 0x08, 0x34, 0xB3, 0xB6, 0x2C, \
|
||||
0x08, 0xEF, 0x3A, 0x0A, 0xEC, 0x0F, 0xDB, 0x56, 0xCA, \
|
||||
0x08, 0xEF, 0x39, 0xA0, 0x6E, 0xED, 0x79, 0xD0, 0x24, \
|
||||
0x08, 0xE7, 0x6C, 0x0B, 0xAF, 0xA9, 0x4E, 0x40, 0xB5, \
|
||||
0x08, 0xE9, 0xB9, 0xAF, 0xBF, 0x25, 0x50, 0xD1, 0x37, \
|
||||
0x08, 0x05, 0x9E, 0xDB, 0xDE, 0x3F, 0x94, 0xE9, 0x6B, \
|
||||
0x08, 0xEC, 0xC5, 0x05, 0xAA, 0x57, 0xDC, 0x8A, 0x5E, \
|
||||
0x08, 0x05, 0x70, 0xDA, 0x84, 0x84, 0xDD, 0xCA, 0x90, \
|
||||
0x07, 0x02, 0x81, 0x00, 0x01, 0xC9, 0xC3, 0x80, \
|
||||
0x08, 0x13, 0x00, 0x20, 0x21, 0x20, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x00, 0x52, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x05, 0x11, 0x10, 0x01, 0x04, 0x21, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x03, 0x00, 0x07, 0x02, 0x71, 0x00, 0x05, 0xC9, 0xC3, 0x80, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0x46, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x01, 0x00, 0x08, 0x03, 0x80, 0x00, 0xB0, 0x10, 0x0C, 0xE8, 0x00, 0x4E, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x06, 0x8D, 0xB9, 0x00, 0x00, 0x02, 0xC0, 0x08, 0x00, 0x12, 0x00, 0x23, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x01, 0x5C, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE0, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x11, 0x11, 0x11, 0x80, 0x1A, 0x20, 0x00, 0x00, 0x28, 0x0C, 0xA4, 0x23, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x45, 0x03, 0x00, 0x85, 0x01, 0x00, \
|
||||
0x08, 0x11, 0x20, 0x04, 0x4B, 0x06, 0x09, 0x10, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x94, 0x0A, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x03, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x04, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, \
|
||||
0x05, 0x11, 0x22, 0x01, 0x03, 0x1D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x2C, 0x0E, 0x0B, 0x04, 0x0C, 0x73, 0x03, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x37, 0x09, 0x00, 0x00, 0x0A, 0xEC, 0x20, 0xFE, \
|
||||
0x08, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x17, 0x56, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x17, 0x13, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x01, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x07, 0x11, 0x01, 0x03, 0x00, 0x03, 0x33, 0x01, \
|
||||
0x08, 0x11, 0x02, 0x04, 0x00, 0x04, 0x06, 0x0A, 0x09, \
|
||||
0x0D, 0x11, 0x10, 0x09, 0x00, 0x10, 0x14, 0x00, 0xFF, 0x31, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0A, 0x11, 0x11, 0x06, 0x00, 0x0A, 0x45, 0xD2, 0xCC, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x00, 0x04, 0x01, 0x08, 0xFF, 0xFF, 0x20, 0x22, 0x00, 0x2A, 0x01, 0x5A, 0x30, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x0C, 0x40, 0x00, 0x01, 0x16, 0x80, 0x00, 0x3F, 0x12, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x09, 0x11, 0x12, 0x05, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x08, 0x11, 0x12, 0x04, 0x36, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x05, 0x00, 0x07, 0x1E, 0x84, 0x80, 0x09, 0xC9, 0xC3, 0x80, 0x00, 0x0D, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0xA7, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x05, 0x00, 0x08, 0x03, 0x80, 0x00, 0x10, 0x20, 0x00, 0xE8, 0x00, 0x4B, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x06, 0xD3, 0xA0, 0x06, 0xD4, 0x02, 0x02, 0x00, 0x00, 0x23, 0x86, 0xD4, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x00, 0xD3, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE0, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x11, 0x10, 0x10, 0x00, 0x1A, 0x15, 0x55, 0x00, 0x28, 0x0C, 0xA4, 0x23, \
|
||||
0x0E, 0x11, 0x20, 0x0A, 0x45, 0x03, 0x01, 0x15, 0x01, 0x00, 0xFF, 0x06, 0x02, 0x18, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x84, 0x0A, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x04, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x08, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0xFF, 0xC4, 0x30, 0x7F, 0xF5, 0xB5, 0xB8, 0xDE, 0x05, 0x17, 0x16, 0x0C, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x03, 0x00, 0x15, 0xFF, 0x00, 0x00, 0xFF, 0xC4, 0x30, 0x7F, 0xF5, 0xB5, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xB8, 0xDE, 0x05, 0x17, 0x16, 0x0C, 0x03, 0x00, 0x15, 0xFF, 0x00, 0x00, \
|
||||
0x08, 0x11, 0x22, 0x04, 0x00, 0x08, 0x7F, 0x00, 0x1D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x34, 0x04, 0x0B, 0x04, 0x07, 0x70, 0x03, \
|
||||
0x10, 0x11, 0x30, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x38, 0x0A, 0xAA, 0xAA, 0x0A, 0xEC, 0x20, 0xFE, \
|
||||
0x00 \
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
#define RADIO_CONFIGURATION_DATA_ARRAY_21 { \
|
||||
0x08, 0x04, 0x21, 0x71, 0x4B, 0x00, 0x00, 0xDC, 0x95, \
|
||||
0x08, 0x05, 0xA6, 0x22, 0x21, 0xF0, 0x41, 0x5B, 0x26, \
|
||||
0x08, 0xE2, 0x2F, 0x1C, 0xBB, 0x0A, 0xA8, 0x94, 0x28, \
|
||||
0x08, 0x05, 0x87, 0x67, 0xE2, 0x58, 0x1A, 0x07, 0x5B, \
|
||||
0x08, 0xE1, 0xD0, 0x72, 0xD8, 0x8A, 0xB8, 0x5B, 0x7D, \
|
||||
0x08, 0x05, 0x11, 0xEC, 0x9E, 0x28, 0x23, 0x1B, 0x6D, \
|
||||
0x08, 0xE2, 0x4F, 0x8A, 0xB2, 0xA9, 0x29, 0x14, 0x13, \
|
||||
0x08, 0x05, 0xD1, 0x2E, 0x71, 0x6A, 0x51, 0x4C, 0x2C, \
|
||||
0x08, 0xE5, 0x80, 0x27, 0x42, 0xA4, 0x69, 0xB0, 0x7F, \
|
||||
0x08, 0x05, 0xAA, 0x81, 0x2A, 0xBD, 0x45, 0xE8, 0xA8, \
|
||||
0x08, 0xEA, 0xE4, 0xF0, 0x24, 0xC9, 0x9F, 0xCC, 0x3C, \
|
||||
0x08, 0x05, 0x08, 0xF5, 0x05, 0x04, 0x27, 0x62, 0x98, \
|
||||
0x08, 0xEA, 0x6B, 0x62, 0x84, 0xA1, 0xF9, 0x4A, 0xE2, \
|
||||
0x08, 0x05, 0xE9, 0x77, 0x05, 0x4F, 0x84, 0xEE, 0x35, \
|
||||
0x08, 0xE2, 0x43, 0xC3, 0x8D, 0xFB, 0xAD, 0x54, 0x25, \
|
||||
0x08, 0x05, 0x14, 0x06, 0x5E, 0x39, 0x36, 0x2F, 0x45, \
|
||||
0x08, 0xEA, 0x0C, 0x1C, 0x74, 0xD0, 0x11, 0xFC, 0x32, \
|
||||
0x08, 0x05, 0xDA, 0x38, 0xBA, 0x0E, 0x3C, 0xE7, 0x8B, \
|
||||
0x08, 0xEA, 0xB0, 0x09, 0xE6, 0xFF, 0x94, 0xBB, 0xA9, \
|
||||
0x08, 0x05, 0xD7, 0x11, 0x29, 0xFE, 0xDC, 0x71, 0xD5, \
|
||||
0x08, 0xEA, 0x7F, 0x83, 0xA7, 0x60, 0x90, 0x62, 0x18, \
|
||||
0x08, 0x05, 0x84, 0x7F, 0x6A, 0xD1, 0x91, 0xC6, 0x52, \
|
||||
0x08, 0xEA, 0x2A, 0xD8, 0x7B, 0x8E, 0x4A, 0x9F, 0x91, \
|
||||
0x08, 0x05, 0xBD, 0xAA, 0x9D, 0x16, 0x18, 0x06, 0x15, \
|
||||
0x08, 0xE2, 0x55, 0xAD, 0x2D, 0x0A, 0x14, 0x1F, 0x5D, \
|
||||
0x08, 0x05, 0xD3, 0xE0, 0x7C, 0x39, 0xCF, 0x01, 0xF0, \
|
||||
0x08, 0xEF, 0x3A, 0x91, 0x72, 0x6A, 0x03, 0xBB, 0x96, \
|
||||
0x08, 0xE7, 0x83, 0x6D, 0xA4, 0x92, 0xFC, 0x13, 0xA7, \
|
||||
0x08, 0xEF, 0xF8, 0xFD, 0xCF, 0x62, 0x07, 0x6F, 0x1E, \
|
||||
0x08, 0xE7, 0x4C, 0xEA, 0x4A, 0x75, 0x4F, 0xD6, 0xCF, \
|
||||
0x08, 0xE2, 0xF6, 0x11, 0xE4, 0x26, 0x0D, 0x4D, 0xC6, \
|
||||
0x08, 0x05, 0xFB, 0xBF, 0xE8, 0x07, 0x89, 0xC3, 0x51, \
|
||||
0x08, 0xEF, 0x82, 0x27, 0x04, 0x3F, 0x96, 0xA8, 0x58, \
|
||||
0x08, 0xE7, 0x41, 0x29, 0x3C, 0x75, 0x2A, 0x03, 0x1C, \
|
||||
0x08, 0xEF, 0xAF, 0x59, 0x98, 0x36, 0xAA, 0x0F, 0x06, \
|
||||
0x08, 0xE6, 0xF6, 0x93, 0x41, 0x2D, 0xEC, 0x0E, 0x99, \
|
||||
0x08, 0x05, 0x29, 0x19, 0x90, 0xE5, 0xAA, 0x36, 0x40, \
|
||||
0x08, 0xE7, 0xFB, 0x68, 0x10, 0x7D, 0x77, 0x5D, 0xC0, \
|
||||
0x08, 0xE7, 0xCB, 0xB4, 0xDD, 0xCE, 0x90, 0x54, 0xBE, \
|
||||
0x08, 0xE7, 0x72, 0x8A, 0xD6, 0x02, 0xF4, 0xDD, 0xCC, \
|
||||
0x08, 0xE7, 0x6A, 0x21, 0x0B, 0x02, 0x86, 0xEC, 0x15, \
|
||||
0x08, 0xE7, 0x7B, 0x7C, 0x3D, 0x6B, 0x81, 0x03, 0xD0, \
|
||||
0x08, 0xEF, 0x7D, 0x61, 0x36, 0x94, 0x7C, 0xA0, 0xDF, \
|
||||
0x08, 0xEF, 0xCC, 0x85, 0x3B, 0xDA, 0xE0, 0x5C, 0x1C, \
|
||||
0x08, 0xE7, 0xE3, 0x75, 0xBB, 0x39, 0x22, 0x4B, 0xA8, \
|
||||
0x08, 0xEF, 0xF9, 0xCE, 0xE0, 0x5E, 0xEB, 0x1D, 0xCB, \
|
||||
0x08, 0xE7, 0xBD, 0xE2, 0x70, 0xD5, 0xAB, 0x4E, 0x3F, \
|
||||
0x08, 0xE7, 0xB7, 0x8D, 0x20, 0x68, 0x6B, 0x09, 0x52, \
|
||||
0x08, 0xEF, 0xA1, 0x1B, 0x90, 0xCD, 0x98, 0x00, 0x63, \
|
||||
0x08, 0xEF, 0x54, 0x67, 0x5D, 0x9C, 0x11, 0xFC, 0x45, \
|
||||
0x08, 0xE7, 0xD4, 0x9B, 0xC8, 0x97, 0xBE, 0x8A, 0x07, \
|
||||
0x08, 0xEF, 0x52, 0x8D, 0x90, 0x63, 0x73, 0xD5, 0x2A, \
|
||||
0x08, 0xEF, 0x03, 0xBC, 0x6E, 0x1C, 0x76, 0xBE, 0x4A, \
|
||||
0x08, 0xE7, 0xC2, 0xED, 0x67, 0xBA, 0x5E, 0x66, 0x21, \
|
||||
0x08, 0xEF, 0xE7, 0x3F, 0x87, 0xBE, 0xE0, 0x7A, 0x6D, \
|
||||
0x08, 0xE7, 0xC9, 0x70, 0x93, 0x1D, 0x64, 0xF5, 0x6C, \
|
||||
0x08, 0xEF, 0xF5, 0x28, 0x08, 0x34, 0xB3, 0xB6, 0x2C, \
|
||||
0x08, 0xEF, 0x3A, 0x0A, 0xEC, 0x0F, 0xDB, 0x56, 0xCA, \
|
||||
0x08, 0xEF, 0x39, 0xA0, 0x6E, 0xED, 0x79, 0xD0, 0x24, \
|
||||
0x08, 0xE7, 0x6C, 0x0B, 0xAF, 0xA9, 0x4E, 0x40, 0xB5, \
|
||||
0x08, 0xE9, 0xB9, 0xAF, 0xBF, 0x25, 0x50, 0xD1, 0x37, \
|
||||
0x08, 0x05, 0x9E, 0xDB, 0xDE, 0x3F, 0x94, 0xE9, 0x6B, \
|
||||
0x08, 0xEC, 0xC5, 0x05, 0xAA, 0x57, 0xDC, 0x8A, 0x5E, \
|
||||
0x08, 0x05, 0x70, 0xDA, 0x84, 0x84, 0xDD, 0xCA, 0x90, \
|
||||
0x07, 0x02, 0x81, 0x00, 0x01, 0xC9, 0xC3, 0x80, \
|
||||
0x08, 0x13, 0x00, 0x20, 0x21, 0x20, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x00, 0x52, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x05, 0x11, 0x10, 0x01, 0x04, 0x21, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x03, 0x00, 0x07, 0x02, 0x71, 0x00, 0x05, 0xC9, 0xC3, 0x80, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0xD2, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x01, 0x00, 0x08, 0x02, 0x80, 0x00, 0xB0, 0x10, 0x0C, 0xE8, 0x00, 0x4E, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x06, 0x8D, 0xB9, 0x00, 0x00, 0x02, 0xC0, 0x08, 0x00, 0x12, 0x00, 0x69, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x01, 0x5C, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE0, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x11, 0x11, 0x11, 0x80, 0x1A, 0x20, 0x00, 0x00, 0x28, 0x0C, 0xA4, 0x23, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x45, 0x03, 0x00, 0x85, 0x01, 0x00, \
|
||||
0x08, 0x11, 0x20, 0x04, 0x4B, 0x06, 0x09, 0x10, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x94, 0x0D, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x03, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x04, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, \
|
||||
0x05, 0x11, 0x22, 0x01, 0x03, 0x1D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x2C, 0x0E, 0x0B, 0x04, 0x0C, 0x73, 0x03, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x3B, 0x0B, 0x00, 0x00, 0x20, 0xC5, 0x20, 0xFA, \
|
||||
0x08, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x17, 0x56, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x17, 0x13, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x01, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x07, 0x11, 0x01, 0x03, 0x00, 0x03, 0x33, 0x01, \
|
||||
0x08, 0x11, 0x02, 0x04, 0x00, 0x04, 0x06, 0x0A, 0x09, \
|
||||
0x0D, 0x11, 0x10, 0x09, 0x00, 0x10, 0x14, 0x00, 0xFF, 0x31, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0A, 0x11, 0x11, 0x06, 0x00, 0x0A, 0x45, 0xD2, 0xCC, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x00, 0x04, 0x01, 0x08, 0xFF, 0xFF, 0x20, 0x22, 0x00, 0x2A, 0x01, 0x5A, 0x30, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x0C, 0x40, 0x00, 0x01, 0x16, 0x80, 0x00, 0x3F, 0x12, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x09, 0x11, 0x12, 0x05, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x08, 0x11, 0x12, 0x04, 0x36, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x05, 0x00, 0x07, 0x1E, 0x84, 0x80, 0x09, 0xC9, 0xC3, 0x80, 0x00, 0x28, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0xF6, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x05, 0x00, 0x08, 0x02, 0x80, 0x00, 0x10, 0x20, 0x00, 0xE8, 0x00, 0x4B, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x06, 0xD3, 0xA0, 0x06, 0xD4, 0x02, 0x02, 0x00, 0x00, 0x23, 0x8A, 0x3E, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x01, 0xA6, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE0, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x11, 0x10, 0x10, 0x00, 0x1A, 0x15, 0x55, 0x00, 0x28, 0x0C, 0xA4, 0x23, \
|
||||
0x0E, 0x11, 0x20, 0x0A, 0x45, 0x03, 0x01, 0x15, 0x01, 0x00, 0xFF, 0x06, 0x02, 0x18, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x84, 0x0D, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x04, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x08, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0xFF, 0xC4, 0x30, 0x7F, 0xF5, 0xB5, 0xB8, 0xDE, 0x05, 0x17, 0x16, 0x0C, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x03, 0x00, 0x15, 0xFF, 0x00, 0x00, 0xFF, 0xC4, 0x30, 0x7F, 0xF5, 0xB5, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xB8, 0xDE, 0x05, 0x17, 0x16, 0x0C, 0x03, 0x00, 0x15, 0xFF, 0x00, 0x00, \
|
||||
0x08, 0x11, 0x22, 0x04, 0x00, 0x08, 0x7F, 0x00, 0x1D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x34, 0x04, 0x0B, 0x04, 0x07, 0x70, 0x03, \
|
||||
0x10, 0x11, 0x30, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x39, 0x0B, 0x33, 0x33, 0x20, 0xC5, 0x20, 0xFA, \
|
||||
0x00 \
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
#define RADIO_CONFIGURATION_DATA_ARRAY_22 { \
|
||||
0x08, 0x04, 0x21, 0x71, 0x4B, 0x00, 0x00, 0xDC, 0x95, \
|
||||
0x08, 0x05, 0xA6, 0x22, 0x21, 0xF0, 0x41, 0x5B, 0x26, \
|
||||
0x08, 0xE2, 0x2F, 0x1C, 0xBB, 0x0A, 0xA8, 0x94, 0x28, \
|
||||
0x08, 0x05, 0x87, 0x67, 0xE2, 0x58, 0x1A, 0x07, 0x5B, \
|
||||
0x08, 0xE1, 0xD0, 0x72, 0xD8, 0x8A, 0xB8, 0x5B, 0x7D, \
|
||||
0x08, 0x05, 0x11, 0xEC, 0x9E, 0x28, 0x23, 0x1B, 0x6D, \
|
||||
0x08, 0xE2, 0x4F, 0x8A, 0xB2, 0xA9, 0x29, 0x14, 0x13, \
|
||||
0x08, 0x05, 0xD1, 0x2E, 0x71, 0x6A, 0x51, 0x4C, 0x2C, \
|
||||
0x08, 0xE5, 0x80, 0x27, 0x42, 0xA4, 0x69, 0xB0, 0x7F, \
|
||||
0x08, 0x05, 0xAA, 0x81, 0x2A, 0xBD, 0x45, 0xE8, 0xA8, \
|
||||
0x08, 0xEA, 0xE4, 0xF0, 0x24, 0xC9, 0x9F, 0xCC, 0x3C, \
|
||||
0x08, 0x05, 0x08, 0xF5, 0x05, 0x04, 0x27, 0x62, 0x98, \
|
||||
0x08, 0xEA, 0x6B, 0x62, 0x84, 0xA1, 0xF9, 0x4A, 0xE2, \
|
||||
0x08, 0x05, 0xE9, 0x77, 0x05, 0x4F, 0x84, 0xEE, 0x35, \
|
||||
0x08, 0xE2, 0x43, 0xC3, 0x8D, 0xFB, 0xAD, 0x54, 0x25, \
|
||||
0x08, 0x05, 0x14, 0x06, 0x5E, 0x39, 0x36, 0x2F, 0x45, \
|
||||
0x08, 0xEA, 0x0C, 0x1C, 0x74, 0xD0, 0x11, 0xFC, 0x32, \
|
||||
0x08, 0x05, 0xDA, 0x38, 0xBA, 0x0E, 0x3C, 0xE7, 0x8B, \
|
||||
0x08, 0xEA, 0xB0, 0x09, 0xE6, 0xFF, 0x94, 0xBB, 0xA9, \
|
||||
0x08, 0x05, 0xD7, 0x11, 0x29, 0xFE, 0xDC, 0x71, 0xD5, \
|
||||
0x08, 0xEA, 0x7F, 0x83, 0xA7, 0x60, 0x90, 0x62, 0x18, \
|
||||
0x08, 0x05, 0x84, 0x7F, 0x6A, 0xD1, 0x91, 0xC6, 0x52, \
|
||||
0x08, 0xEA, 0x2A, 0xD8, 0x7B, 0x8E, 0x4A, 0x9F, 0x91, \
|
||||
0x08, 0x05, 0xBD, 0xAA, 0x9D, 0x16, 0x18, 0x06, 0x15, \
|
||||
0x08, 0xE2, 0x55, 0xAD, 0x2D, 0x0A, 0x14, 0x1F, 0x5D, \
|
||||
0x08, 0x05, 0xD3, 0xE0, 0x7C, 0x39, 0xCF, 0x01, 0xF0, \
|
||||
0x08, 0xEF, 0x3A, 0x91, 0x72, 0x6A, 0x03, 0xBB, 0x96, \
|
||||
0x08, 0xE7, 0x83, 0x6D, 0xA4, 0x92, 0xFC, 0x13, 0xA7, \
|
||||
0x08, 0xEF, 0xF8, 0xFD, 0xCF, 0x62, 0x07, 0x6F, 0x1E, \
|
||||
0x08, 0xE7, 0x4C, 0xEA, 0x4A, 0x75, 0x4F, 0xD6, 0xCF, \
|
||||
0x08, 0xE2, 0xF6, 0x11, 0xE4, 0x26, 0x0D, 0x4D, 0xC6, \
|
||||
0x08, 0x05, 0xFB, 0xBF, 0xE8, 0x07, 0x89, 0xC3, 0x51, \
|
||||
0x08, 0xEF, 0x82, 0x27, 0x04, 0x3F, 0x96, 0xA8, 0x58, \
|
||||
0x08, 0xE7, 0x41, 0x29, 0x3C, 0x75, 0x2A, 0x03, 0x1C, \
|
||||
0x08, 0xEF, 0xAF, 0x59, 0x98, 0x36, 0xAA, 0x0F, 0x06, \
|
||||
0x08, 0xE6, 0xF6, 0x93, 0x41, 0x2D, 0xEC, 0x0E, 0x99, \
|
||||
0x08, 0x05, 0x29, 0x19, 0x90, 0xE5, 0xAA, 0x36, 0x40, \
|
||||
0x08, 0xE7, 0xFB, 0x68, 0x10, 0x7D, 0x77, 0x5D, 0xC0, \
|
||||
0x08, 0xE7, 0xCB, 0xB4, 0xDD, 0xCE, 0x90, 0x54, 0xBE, \
|
||||
0x08, 0xE7, 0x72, 0x8A, 0xD6, 0x02, 0xF4, 0xDD, 0xCC, \
|
||||
0x08, 0xE7, 0x6A, 0x21, 0x0B, 0x02, 0x86, 0xEC, 0x15, \
|
||||
0x08, 0xE7, 0x7B, 0x7C, 0x3D, 0x6B, 0x81, 0x03, 0xD0, \
|
||||
0x08, 0xEF, 0x7D, 0x61, 0x36, 0x94, 0x7C, 0xA0, 0xDF, \
|
||||
0x08, 0xEF, 0xCC, 0x85, 0x3B, 0xDA, 0xE0, 0x5C, 0x1C, \
|
||||
0x08, 0xE7, 0xE3, 0x75, 0xBB, 0x39, 0x22, 0x4B, 0xA8, \
|
||||
0x08, 0xEF, 0xF9, 0xCE, 0xE0, 0x5E, 0xEB, 0x1D, 0xCB, \
|
||||
0x08, 0xE7, 0xBD, 0xE2, 0x70, 0xD5, 0xAB, 0x4E, 0x3F, \
|
||||
0x08, 0xE7, 0xB7, 0x8D, 0x20, 0x68, 0x6B, 0x09, 0x52, \
|
||||
0x08, 0xEF, 0xA1, 0x1B, 0x90, 0xCD, 0x98, 0x00, 0x63, \
|
||||
0x08, 0xEF, 0x54, 0x67, 0x5D, 0x9C, 0x11, 0xFC, 0x45, \
|
||||
0x08, 0xE7, 0xD4, 0x9B, 0xC8, 0x97, 0xBE, 0x8A, 0x07, \
|
||||
0x08, 0xEF, 0x52, 0x8D, 0x90, 0x63, 0x73, 0xD5, 0x2A, \
|
||||
0x08, 0xEF, 0x03, 0xBC, 0x6E, 0x1C, 0x76, 0xBE, 0x4A, \
|
||||
0x08, 0xE7, 0xC2, 0xED, 0x67, 0xBA, 0x5E, 0x66, 0x21, \
|
||||
0x08, 0xEF, 0xE7, 0x3F, 0x87, 0xBE, 0xE0, 0x7A, 0x6D, \
|
||||
0x08, 0xE7, 0xC9, 0x70, 0x93, 0x1D, 0x64, 0xF5, 0x6C, \
|
||||
0x08, 0xEF, 0xF5, 0x28, 0x08, 0x34, 0xB3, 0xB6, 0x2C, \
|
||||
0x08, 0xEF, 0x3A, 0x0A, 0xEC, 0x0F, 0xDB, 0x56, 0xCA, \
|
||||
0x08, 0xEF, 0x39, 0xA0, 0x6E, 0xED, 0x79, 0xD0, 0x24, \
|
||||
0x08, 0xE7, 0x6C, 0x0B, 0xAF, 0xA9, 0x4E, 0x40, 0xB5, \
|
||||
0x08, 0xE9, 0xB9, 0xAF, 0xBF, 0x25, 0x50, 0xD1, 0x37, \
|
||||
0x08, 0x05, 0x9E, 0xDB, 0xDE, 0x3F, 0x94, 0xE9, 0x6B, \
|
||||
0x08, 0xEC, 0xC5, 0x05, 0xAA, 0x57, 0xDC, 0x8A, 0x5E, \
|
||||
0x08, 0x05, 0x70, 0xDA, 0x84, 0x84, 0xDD, 0xCA, 0x90, \
|
||||
0x07, 0x02, 0x81, 0x00, 0x01, 0xC9, 0xC3, 0x80, \
|
||||
0x08, 0x13, 0x00, 0x20, 0x21, 0x20, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x00, 0x52, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x05, 0x11, 0x10, 0x01, 0x04, 0x21, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x03, 0x00, 0x07, 0x02, 0x71, 0x00, 0x05, 0xC9, 0xC3, 0x80, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0x46, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x01, 0x00, 0x08, 0x03, 0x80, 0x00, 0xB0, 0x10, 0x0C, 0xE8, 0x00, 0x4E, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x06, 0x8D, 0xB9, 0x00, 0x00, 0x02, 0xC0, 0x08, 0x00, 0x12, 0x00, 0x23, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x01, 0x5C, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE0, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x11, 0x11, 0x11, 0x80, 0x1A, 0x20, 0x00, 0x00, 0x28, 0x0C, 0xA4, 0x23, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x45, 0x03, 0x00, 0x85, 0x01, 0x00, \
|
||||
0x08, 0x11, 0x20, 0x04, 0x4B, 0x06, 0x09, 0x10, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x94, 0x0A, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x03, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x04, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, \
|
||||
0x05, 0x11, 0x22, 0x01, 0x03, 0x1D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x2C, 0x0E, 0x0B, 0x04, 0x0C, 0x73, 0x03, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x37, 0x09, 0x00, 0x00, 0x0A, 0xEC, 0x20, 0xFE, \
|
||||
0x08, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x17, 0x56, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x17, 0x13, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x01, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x07, 0x11, 0x01, 0x03, 0x00, 0x03, 0x33, 0x01, \
|
||||
0x08, 0x11, 0x02, 0x04, 0x00, 0x04, 0x06, 0x0A, 0x09, \
|
||||
0x0D, 0x11, 0x10, 0x09, 0x00, 0x10, 0x14, 0x00, 0xFF, 0x31, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0A, 0x11, 0x11, 0x06, 0x00, 0x0A, 0x45, 0xD2, 0xCC, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x00, 0x04, 0x01, 0x08, 0xFF, 0xFF, 0x20, 0x22, 0x00, 0x2A, 0x01, 0x5A, 0x30, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x0C, 0x40, 0x00, 0x01, 0x16, 0x80, 0x00, 0x3F, 0x12, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x09, 0x11, 0x12, 0x05, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x08, 0x11, 0x12, 0x04, 0x36, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x05, 0x00, 0x07, 0x36, 0xEE, 0x80, 0x09, 0xC9, 0xC3, 0x80, 0x00, 0x18, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0x93, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x05, 0x00, 0x08, 0x03, 0x80, 0x00, 0x00, 0x20, 0x00, 0xE8, 0x00, 0x53, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x06, 0x24, 0xDD, 0x06, 0x2B, 0x02, 0x02, 0x00, 0x00, 0x23, 0x8C, 0x4A, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x00, 0xD3, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE0, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x11, 0x12, 0x12, 0x00, 0x1A, 0x15, 0x55, 0x00, 0x28, 0x0C, 0xA4, 0x23, \
|
||||
0x0E, 0x11, 0x20, 0x0A, 0x45, 0x03, 0x00, 0xF9, 0x01, 0x00, 0xFF, 0x06, 0x02, 0x18, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x84, 0x0A, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x03, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x07, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0xCC, 0xA1, 0x30, 0xA0, 0x21, 0xD1, 0xB9, 0xC9, 0xEA, 0x05, 0x12, 0x11, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x0A, 0x04, 0x15, 0xFC, 0x03, 0x00, 0xCC, 0xA1, 0x30, 0xA0, 0x21, 0xD1, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xB9, 0xC9, 0xEA, 0x05, 0x12, 0x11, 0x0A, 0x04, 0x15, 0xFC, 0x03, 0x00, \
|
||||
0x08, 0x11, 0x22, 0x04, 0x00, 0x08, 0x7F, 0x00, 0x1D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x39, 0x04, 0x0B, 0x05, 0x04, 0x01, 0x03, \
|
||||
0x10, 0x11, 0x30, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x38, 0x0A, 0xAA, 0xAA, 0x0A, 0xEC, 0x20, 0xFE, \
|
||||
0x00 \
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
#define RADIO_CONFIGURATION_DATA_ARRAY_22 { \
|
||||
0x08, 0x04, 0x21, 0x71, 0x4B, 0x00, 0x00, 0xDC, 0x95, \
|
||||
0x08, 0x05, 0xA6, 0x22, 0x21, 0xF0, 0x41, 0x5B, 0x26, \
|
||||
0x08, 0xE2, 0x2F, 0x1C, 0xBB, 0x0A, 0xA8, 0x94, 0x28, \
|
||||
0x08, 0x05, 0x87, 0x67, 0xE2, 0x58, 0x1A, 0x07, 0x5B, \
|
||||
0x08, 0xE1, 0xD0, 0x72, 0xD8, 0x8A, 0xB8, 0x5B, 0x7D, \
|
||||
0x08, 0x05, 0x11, 0xEC, 0x9E, 0x28, 0x23, 0x1B, 0x6D, \
|
||||
0x08, 0xE2, 0x4F, 0x8A, 0xB2, 0xA9, 0x29, 0x14, 0x13, \
|
||||
0x08, 0x05, 0xD1, 0x2E, 0x71, 0x6A, 0x51, 0x4C, 0x2C, \
|
||||
0x08, 0xE5, 0x80, 0x27, 0x42, 0xA4, 0x69, 0xB0, 0x7F, \
|
||||
0x08, 0x05, 0xAA, 0x81, 0x2A, 0xBD, 0x45, 0xE8, 0xA8, \
|
||||
0x08, 0xEA, 0xE4, 0xF0, 0x24, 0xC9, 0x9F, 0xCC, 0x3C, \
|
||||
0x08, 0x05, 0x08, 0xF5, 0x05, 0x04, 0x27, 0x62, 0x98, \
|
||||
0x08, 0xEA, 0x6B, 0x62, 0x84, 0xA1, 0xF9, 0x4A, 0xE2, \
|
||||
0x08, 0x05, 0xE9, 0x77, 0x05, 0x4F, 0x84, 0xEE, 0x35, \
|
||||
0x08, 0xE2, 0x43, 0xC3, 0x8D, 0xFB, 0xAD, 0x54, 0x25, \
|
||||
0x08, 0x05, 0x14, 0x06, 0x5E, 0x39, 0x36, 0x2F, 0x45, \
|
||||
0x08, 0xEA, 0x0C, 0x1C, 0x74, 0xD0, 0x11, 0xFC, 0x32, \
|
||||
0x08, 0x05, 0xDA, 0x38, 0xBA, 0x0E, 0x3C, 0xE7, 0x8B, \
|
||||
0x08, 0xEA, 0xB0, 0x09, 0xE6, 0xFF, 0x94, 0xBB, 0xA9, \
|
||||
0x08, 0x05, 0xD7, 0x11, 0x29, 0xFE, 0xDC, 0x71, 0xD5, \
|
||||
0x08, 0xEA, 0x7F, 0x83, 0xA7, 0x60, 0x90, 0x62, 0x18, \
|
||||
0x08, 0x05, 0x84, 0x7F, 0x6A, 0xD1, 0x91, 0xC6, 0x52, \
|
||||
0x08, 0xEA, 0x2A, 0xD8, 0x7B, 0x8E, 0x4A, 0x9F, 0x91, \
|
||||
0x08, 0x05, 0xBD, 0xAA, 0x9D, 0x16, 0x18, 0x06, 0x15, \
|
||||
0x08, 0xE2, 0x55, 0xAD, 0x2D, 0x0A, 0x14, 0x1F, 0x5D, \
|
||||
0x08, 0x05, 0xD3, 0xE0, 0x7C, 0x39, 0xCF, 0x01, 0xF0, \
|
||||
0x08, 0xEF, 0x3A, 0x91, 0x72, 0x6A, 0x03, 0xBB, 0x96, \
|
||||
0x08, 0xE7, 0x83, 0x6D, 0xA4, 0x92, 0xFC, 0x13, 0xA7, \
|
||||
0x08, 0xEF, 0xF8, 0xFD, 0xCF, 0x62, 0x07, 0x6F, 0x1E, \
|
||||
0x08, 0xE7, 0x4C, 0xEA, 0x4A, 0x75, 0x4F, 0xD6, 0xCF, \
|
||||
0x08, 0xE2, 0xF6, 0x11, 0xE4, 0x26, 0x0D, 0x4D, 0xC6, \
|
||||
0x08, 0x05, 0xFB, 0xBF, 0xE8, 0x07, 0x89, 0xC3, 0x51, \
|
||||
0x08, 0xEF, 0x82, 0x27, 0x04, 0x3F, 0x96, 0xA8, 0x58, \
|
||||
0x08, 0xE7, 0x41, 0x29, 0x3C, 0x75, 0x2A, 0x03, 0x1C, \
|
||||
0x08, 0xEF, 0xAF, 0x59, 0x98, 0x36, 0xAA, 0x0F, 0x06, \
|
||||
0x08, 0xE6, 0xF6, 0x93, 0x41, 0x2D, 0xEC, 0x0E, 0x99, \
|
||||
0x08, 0x05, 0x29, 0x19, 0x90, 0xE5, 0xAA, 0x36, 0x40, \
|
||||
0x08, 0xE7, 0xFB, 0x68, 0x10, 0x7D, 0x77, 0x5D, 0xC0, \
|
||||
0x08, 0xE7, 0xCB, 0xB4, 0xDD, 0xCE, 0x90, 0x54, 0xBE, \
|
||||
0x08, 0xE7, 0x72, 0x8A, 0xD6, 0x02, 0xF4, 0xDD, 0xCC, \
|
||||
0x08, 0xE7, 0x6A, 0x21, 0x0B, 0x02, 0x86, 0xEC, 0x15, \
|
||||
0x08, 0xE7, 0x7B, 0x7C, 0x3D, 0x6B, 0x81, 0x03, 0xD0, \
|
||||
0x08, 0xEF, 0x7D, 0x61, 0x36, 0x94, 0x7C, 0xA0, 0xDF, \
|
||||
0x08, 0xEF, 0xCC, 0x85, 0x3B, 0xDA, 0xE0, 0x5C, 0x1C, \
|
||||
0x08, 0xE7, 0xE3, 0x75, 0xBB, 0x39, 0x22, 0x4B, 0xA8, \
|
||||
0x08, 0xEF, 0xF9, 0xCE, 0xE0, 0x5E, 0xEB, 0x1D, 0xCB, \
|
||||
0x08, 0xE7, 0xBD, 0xE2, 0x70, 0xD5, 0xAB, 0x4E, 0x3F, \
|
||||
0x08, 0xE7, 0xB7, 0x8D, 0x20, 0x68, 0x6B, 0x09, 0x52, \
|
||||
0x08, 0xEF, 0xA1, 0x1B, 0x90, 0xCD, 0x98, 0x00, 0x63, \
|
||||
0x08, 0xEF, 0x54, 0x67, 0x5D, 0x9C, 0x11, 0xFC, 0x45, \
|
||||
0x08, 0xE7, 0xD4, 0x9B, 0xC8, 0x97, 0xBE, 0x8A, 0x07, \
|
||||
0x08, 0xEF, 0x52, 0x8D, 0x90, 0x63, 0x73, 0xD5, 0x2A, \
|
||||
0x08, 0xEF, 0x03, 0xBC, 0x6E, 0x1C, 0x76, 0xBE, 0x4A, \
|
||||
0x08, 0xE7, 0xC2, 0xED, 0x67, 0xBA, 0x5E, 0x66, 0x21, \
|
||||
0x08, 0xEF, 0xE7, 0x3F, 0x87, 0xBE, 0xE0, 0x7A, 0x6D, \
|
||||
0x08, 0xE7, 0xC9, 0x70, 0x93, 0x1D, 0x64, 0xF5, 0x6C, \
|
||||
0x08, 0xEF, 0xF5, 0x28, 0x08, 0x34, 0xB3, 0xB6, 0x2C, \
|
||||
0x08, 0xEF, 0x3A, 0x0A, 0xEC, 0x0F, 0xDB, 0x56, 0xCA, \
|
||||
0x08, 0xEF, 0x39, 0xA0, 0x6E, 0xED, 0x79, 0xD0, 0x24, \
|
||||
0x08, 0xE7, 0x6C, 0x0B, 0xAF, 0xA9, 0x4E, 0x40, 0xB5, \
|
||||
0x08, 0xE9, 0xB9, 0xAF, 0xBF, 0x25, 0x50, 0xD1, 0x37, \
|
||||
0x08, 0x05, 0x9E, 0xDB, 0xDE, 0x3F, 0x94, 0xE9, 0x6B, \
|
||||
0x08, 0xEC, 0xC5, 0x05, 0xAA, 0x57, 0xDC, 0x8A, 0x5E, \
|
||||
0x08, 0x05, 0x70, 0xDA, 0x84, 0x84, 0xDD, 0xCA, 0x90, \
|
||||
0x07, 0x02, 0x81, 0x00, 0x01, 0xC9, 0xC3, 0x80, \
|
||||
0x08, 0x13, 0x00, 0x20, 0x21, 0x20, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x00, 0x52, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x05, 0x11, 0x10, 0x01, 0x04, 0x21, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x03, 0x00, 0x07, 0x02, 0x71, 0x00, 0x05, 0xC9, 0xC3, 0x80, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0xD2, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x01, 0x00, 0x08, 0x02, 0x80, 0x00, 0xB0, 0x10, 0x0C, 0xE8, 0x00, 0x4E, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x06, 0x8D, 0xB9, 0x00, 0x00, 0x02, 0xC0, 0x08, 0x00, 0x12, 0x00, 0x69, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x01, 0x5C, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE0, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x11, 0x11, 0x11, 0x80, 0x1A, 0x20, 0x00, 0x00, 0x28, 0x0C, 0xA4, 0x23, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x45, 0x03, 0x00, 0x85, 0x01, 0x00, \
|
||||
0x08, 0x11, 0x20, 0x04, 0x4B, 0x06, 0x09, 0x10, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x94, 0x0D, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x03, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x04, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, \
|
||||
0x05, 0x11, 0x22, 0x01, 0x03, 0x1D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x2C, 0x0E, 0x0B, 0x04, 0x0C, 0x73, 0x03, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x3B, 0x0B, 0x00, 0x00, 0x20, 0xC5, 0x20, 0xFA, \
|
||||
0x08, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x17, 0x56, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x17, 0x13, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x01, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x07, 0x11, 0x01, 0x03, 0x00, 0x03, 0x33, 0x01, \
|
||||
0x08, 0x11, 0x02, 0x04, 0x00, 0x04, 0x06, 0x0A, 0x09, \
|
||||
0x0D, 0x11, 0x10, 0x09, 0x00, 0x10, 0x14, 0x00, 0xFF, 0x31, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0A, 0x11, 0x11, 0x06, 0x00, 0x0A, 0x45, 0xD2, 0xCC, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x00, 0x04, 0x01, 0x08, 0xFF, 0xFF, 0x20, 0x22, 0x00, 0x2A, 0x01, 0x5A, 0x30, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x0C, 0x40, 0x00, 0x01, 0x16, 0x80, 0x00, 0x3F, 0x12, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x09, 0x11, 0x12, 0x05, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x08, 0x11, 0x12, 0x04, 0x36, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x05, 0x00, 0x07, 0x36, 0xEE, 0x80, 0x09, 0xC9, 0xC3, 0x80, 0x00, 0x49, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0xBA, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x05, 0x00, 0x08, 0x02, 0x80, 0x00, 0x00, 0x20, 0x00, 0xE8, 0x00, 0x53, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x06, 0x24, 0xDD, 0x06, 0x2B, 0x02, 0x02, 0x00, 0x00, 0x23, 0x8F, 0xFF, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x01, 0xCD, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE0, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x11, 0x12, 0x12, 0x00, 0x1A, 0x15, 0x55, 0x00, 0x28, 0x0C, 0xA4, 0x23, \
|
||||
0x0E, 0x11, 0x20, 0x0A, 0x45, 0x03, 0x00, 0xF9, 0x01, 0x00, 0xFF, 0x06, 0x02, 0x18, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x84, 0x0D, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x03, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x07, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0xCC, 0xA1, 0x30, 0xA0, 0x21, 0xD1, 0xB9, 0xC9, 0xEA, 0x05, 0x12, 0x11, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x0A, 0x04, 0x15, 0xFC, 0x03, 0x00, 0xCC, 0xA1, 0x30, 0xA0, 0x21, 0xD1, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xB9, 0xC9, 0xEA, 0x05, 0x12, 0x11, 0x0A, 0x04, 0x15, 0xFC, 0x03, 0x00, \
|
||||
0x08, 0x11, 0x22, 0x04, 0x00, 0x08, 0x7F, 0x00, 0x1D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x39, 0x04, 0x0B, 0x05, 0x04, 0x01, 0x03, \
|
||||
0x10, 0x11, 0x30, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x39, 0x0B, 0x33, 0x33, 0x20, 0xC5, 0x20, 0xFA, \
|
||||
0x00 \
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
#define RADIO_CONFIGURATION_DATA_ARRAY_23 { \
|
||||
0x08, 0x04, 0x21, 0x71, 0x4B, 0x00, 0x00, 0xDC, 0x95, \
|
||||
0x08, 0x05, 0xA6, 0x22, 0x21, 0xF0, 0x41, 0x5B, 0x26, \
|
||||
0x08, 0xE2, 0x2F, 0x1C, 0xBB, 0x0A, 0xA8, 0x94, 0x28, \
|
||||
0x08, 0x05, 0x87, 0x67, 0xE2, 0x58, 0x1A, 0x07, 0x5B, \
|
||||
0x08, 0xE1, 0xD0, 0x72, 0xD8, 0x8A, 0xB8, 0x5B, 0x7D, \
|
||||
0x08, 0x05, 0x11, 0xEC, 0x9E, 0x28, 0x23, 0x1B, 0x6D, \
|
||||
0x08, 0xE2, 0x4F, 0x8A, 0xB2, 0xA9, 0x29, 0x14, 0x13, \
|
||||
0x08, 0x05, 0xD1, 0x2E, 0x71, 0x6A, 0x51, 0x4C, 0x2C, \
|
||||
0x08, 0xE5, 0x80, 0x27, 0x42, 0xA4, 0x69, 0xB0, 0x7F, \
|
||||
0x08, 0x05, 0xAA, 0x81, 0x2A, 0xBD, 0x45, 0xE8, 0xA8, \
|
||||
0x08, 0xEA, 0xE4, 0xF0, 0x24, 0xC9, 0x9F, 0xCC, 0x3C, \
|
||||
0x08, 0x05, 0x08, 0xF5, 0x05, 0x04, 0x27, 0x62, 0x98, \
|
||||
0x08, 0xEA, 0x6B, 0x62, 0x84, 0xA1, 0xF9, 0x4A, 0xE2, \
|
||||
0x08, 0x05, 0xE9, 0x77, 0x05, 0x4F, 0x84, 0xEE, 0x35, \
|
||||
0x08, 0xE2, 0x43, 0xC3, 0x8D, 0xFB, 0xAD, 0x54, 0x25, \
|
||||
0x08, 0x05, 0x14, 0x06, 0x5E, 0x39, 0x36, 0x2F, 0x45, \
|
||||
0x08, 0xEA, 0x0C, 0x1C, 0x74, 0xD0, 0x11, 0xFC, 0x32, \
|
||||
0x08, 0x05, 0xDA, 0x38, 0xBA, 0x0E, 0x3C, 0xE7, 0x8B, \
|
||||
0x08, 0xEA, 0xB0, 0x09, 0xE6, 0xFF, 0x94, 0xBB, 0xA9, \
|
||||
0x08, 0x05, 0xD7, 0x11, 0x29, 0xFE, 0xDC, 0x71, 0xD5, \
|
||||
0x08, 0xEA, 0x7F, 0x83, 0xA7, 0x60, 0x90, 0x62, 0x18, \
|
||||
0x08, 0x05, 0x84, 0x7F, 0x6A, 0xD1, 0x91, 0xC6, 0x52, \
|
||||
0x08, 0xEA, 0x2A, 0xD8, 0x7B, 0x8E, 0x4A, 0x9F, 0x91, \
|
||||
0x08, 0x05, 0xBD, 0xAA, 0x9D, 0x16, 0x18, 0x06, 0x15, \
|
||||
0x08, 0xE2, 0x55, 0xAD, 0x2D, 0x0A, 0x14, 0x1F, 0x5D, \
|
||||
0x08, 0x05, 0xD3, 0xE0, 0x7C, 0x39, 0xCF, 0x01, 0xF0, \
|
||||
0x08, 0xEF, 0x3A, 0x91, 0x72, 0x6A, 0x03, 0xBB, 0x96, \
|
||||
0x08, 0xE7, 0x83, 0x6D, 0xA4, 0x92, 0xFC, 0x13, 0xA7, \
|
||||
0x08, 0xEF, 0xF8, 0xFD, 0xCF, 0x62, 0x07, 0x6F, 0x1E, \
|
||||
0x08, 0xE7, 0x4C, 0xEA, 0x4A, 0x75, 0x4F, 0xD6, 0xCF, \
|
||||
0x08, 0xE2, 0xF6, 0x11, 0xE4, 0x26, 0x0D, 0x4D, 0xC6, \
|
||||
0x08, 0x05, 0xFB, 0xBF, 0xE8, 0x07, 0x89, 0xC3, 0x51, \
|
||||
0x08, 0xEF, 0x82, 0x27, 0x04, 0x3F, 0x96, 0xA8, 0x58, \
|
||||
0x08, 0xE7, 0x41, 0x29, 0x3C, 0x75, 0x2A, 0x03, 0x1C, \
|
||||
0x08, 0xEF, 0xAF, 0x59, 0x98, 0x36, 0xAA, 0x0F, 0x06, \
|
||||
0x08, 0xE6, 0xF6, 0x93, 0x41, 0x2D, 0xEC, 0x0E, 0x99, \
|
||||
0x08, 0x05, 0x29, 0x19, 0x90, 0xE5, 0xAA, 0x36, 0x40, \
|
||||
0x08, 0xE7, 0xFB, 0x68, 0x10, 0x7D, 0x77, 0x5D, 0xC0, \
|
||||
0x08, 0xE7, 0xCB, 0xB4, 0xDD, 0xCE, 0x90, 0x54, 0xBE, \
|
||||
0x08, 0xE7, 0x72, 0x8A, 0xD6, 0x02, 0xF4, 0xDD, 0xCC, \
|
||||
0x08, 0xE7, 0x6A, 0x21, 0x0B, 0x02, 0x86, 0xEC, 0x15, \
|
||||
0x08, 0xE7, 0x7B, 0x7C, 0x3D, 0x6B, 0x81, 0x03, 0xD0, \
|
||||
0x08, 0xEF, 0x7D, 0x61, 0x36, 0x94, 0x7C, 0xA0, 0xDF, \
|
||||
0x08, 0xEF, 0xCC, 0x85, 0x3B, 0xDA, 0xE0, 0x5C, 0x1C, \
|
||||
0x08, 0xE7, 0xE3, 0x75, 0xBB, 0x39, 0x22, 0x4B, 0xA8, \
|
||||
0x08, 0xEF, 0xF9, 0xCE, 0xE0, 0x5E, 0xEB, 0x1D, 0xCB, \
|
||||
0x08, 0xE7, 0xBD, 0xE2, 0x70, 0xD5, 0xAB, 0x4E, 0x3F, \
|
||||
0x08, 0xE7, 0xB7, 0x8D, 0x20, 0x68, 0x6B, 0x09, 0x52, \
|
||||
0x08, 0xEF, 0xA1, 0x1B, 0x90, 0xCD, 0x98, 0x00, 0x63, \
|
||||
0x08, 0xEF, 0x54, 0x67, 0x5D, 0x9C, 0x11, 0xFC, 0x45, \
|
||||
0x08, 0xE7, 0xD4, 0x9B, 0xC8, 0x97, 0xBE, 0x8A, 0x07, \
|
||||
0x08, 0xEF, 0x52, 0x8D, 0x90, 0x63, 0x73, 0xD5, 0x2A, \
|
||||
0x08, 0xEF, 0x03, 0xBC, 0x6E, 0x1C, 0x76, 0xBE, 0x4A, \
|
||||
0x08, 0xE7, 0xC2, 0xED, 0x67, 0xBA, 0x5E, 0x66, 0x21, \
|
||||
0x08, 0xEF, 0xE7, 0x3F, 0x87, 0xBE, 0xE0, 0x7A, 0x6D, \
|
||||
0x08, 0xE7, 0xC9, 0x70, 0x93, 0x1D, 0x64, 0xF5, 0x6C, \
|
||||
0x08, 0xEF, 0xF5, 0x28, 0x08, 0x34, 0xB3, 0xB6, 0x2C, \
|
||||
0x08, 0xEF, 0x3A, 0x0A, 0xEC, 0x0F, 0xDB, 0x56, 0xCA, \
|
||||
0x08, 0xEF, 0x39, 0xA0, 0x6E, 0xED, 0x79, 0xD0, 0x24, \
|
||||
0x08, 0xE7, 0x6C, 0x0B, 0xAF, 0xA9, 0x4E, 0x40, 0xB5, \
|
||||
0x08, 0xE9, 0xB9, 0xAF, 0xBF, 0x25, 0x50, 0xD1, 0x37, \
|
||||
0x08, 0x05, 0x9E, 0xDB, 0xDE, 0x3F, 0x94, 0xE9, 0x6B, \
|
||||
0x08, 0xEC, 0xC5, 0x05, 0xAA, 0x57, 0xDC, 0x8A, 0x5E, \
|
||||
0x08, 0x05, 0x70, 0xDA, 0x84, 0x84, 0xDD, 0xCA, 0x90, \
|
||||
0x07, 0x02, 0x81, 0x00, 0x01, 0xC9, 0xC3, 0x80, \
|
||||
0x08, 0x13, 0x00, 0x20, 0x21, 0x20, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x00, 0x52, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x05, 0x11, 0x10, 0x01, 0x04, 0x21, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x03, 0x00, 0x07, 0x02, 0x71, 0x00, 0x05, 0xC9, 0xC3, 0x80, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0x46, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x01, 0x00, 0x08, 0x03, 0x80, 0x00, 0xB0, 0x10, 0x0C, 0xE8, 0x00, 0x4E, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x06, 0x8D, 0xB9, 0x00, 0x00, 0x02, 0xC0, 0x08, 0x00, 0x12, 0x00, 0x23, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x01, 0x5C, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE0, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x11, 0x11, 0x11, 0x80, 0x1A, 0x20, 0x00, 0x00, 0x28, 0x0C, 0xA4, 0x23, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x45, 0x03, 0x00, 0x85, 0x01, 0x00, \
|
||||
0x08, 0x11, 0x20, 0x04, 0x4B, 0x06, 0x09, 0x10, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x94, 0x0A, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x03, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x04, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, \
|
||||
0x05, 0x11, 0x22, 0x01, 0x03, 0x1D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x2C, 0x0E, 0x0B, 0x04, 0x0C, 0x73, 0x03, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x37, 0x09, 0x00, 0x00, 0x0A, 0xEC, 0x20, 0xFE, \
|
||||
0x08, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x17, 0x56, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x17, 0x13, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x01, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x07, 0x11, 0x01, 0x03, 0x00, 0x03, 0x33, 0x01, \
|
||||
0x08, 0x11, 0x02, 0x04, 0x00, 0x04, 0x06, 0x0A, 0x09, \
|
||||
0x0D, 0x11, 0x10, 0x09, 0x00, 0x10, 0x14, 0x00, 0xFF, 0x31, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0A, 0x11, 0x11, 0x06, 0x00, 0x0A, 0x45, 0xD2, 0xCC, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x00, 0x04, 0x01, 0x08, 0xFF, 0xFF, 0x20, 0x22, 0x00, 0x2A, 0x01, 0x5A, 0x30, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x0C, 0x40, 0x00, 0x01, 0x16, 0x80, 0x00, 0x3F, 0x12, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x09, 0x11, 0x12, 0x05, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x08, 0x11, 0x12, 0x04, 0x36, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x05, 0x00, 0x07, 0x2D, 0xC6, 0xC0, 0x01, 0xC9, 0xC3, 0x80, 0x00, 0x28, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0xF6, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x05, 0x00, 0x08, 0x03, 0x80, 0x00, 0x00, 0x30, 0x00, 0xE8, 0x00, 0x64, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x05, 0x1E, 0xB8, 0x05, 0x1F, 0x02, 0x02, 0x00, 0x00, 0x23, 0x8A, 0x3E, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x01, 0xC3, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE2, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x22, 0x0B, 0x0B, 0x00, 0x1A, 0x15, 0x55, 0x00, 0x28, 0x0C, 0xA4, 0x23, \
|
||||
0x0E, 0x11, 0x20, 0x0A, 0x45, 0x03, 0x00, 0xD0, 0x01, 0x00, 0xFF, 0x08, 0x02, 0x18, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x84, 0x0A, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x03, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x06, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0xA2, 0x81, 0x26, 0xAF, 0x3F, 0xEE, 0xC8, 0xC7, 0xDB, 0xF2, 0x02, 0x08, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x07, 0x03, 0x15, 0xFC, 0x0F, 0x00, 0xA2, 0x81, 0x26, 0xAF, 0x3F, 0xEE, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xC8, 0xC7, 0xDB, 0xF2, 0x02, 0x08, 0x07, 0x03, 0x15, 0xFC, 0x0F, 0x00, \
|
||||
0x08, 0x11, 0x22, 0x04, 0x00, 0x08, 0x7F, 0x00, 0x3D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x01, 0x05, 0x0B, 0x05, 0x02, 0x00, 0x03, \
|
||||
0x10, 0x11, 0x30, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x38, 0x0A, 0xAA, 0xAA, 0x0A, 0xEC, 0x20, 0xFE, \
|
||||
0x00 \
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
#define RADIO_CONFIGURATION_DATA_ARRAY_23 { \
|
||||
0x08, 0x04, 0x21, 0x71, 0x4B, 0x00, 0x00, 0xDC, 0x95, \
|
||||
0x08, 0x05, 0xA6, 0x22, 0x21, 0xF0, 0x41, 0x5B, 0x26, \
|
||||
0x08, 0xE2, 0x2F, 0x1C, 0xBB, 0x0A, 0xA8, 0x94, 0x28, \
|
||||
0x08, 0x05, 0x87, 0x67, 0xE2, 0x58, 0x1A, 0x07, 0x5B, \
|
||||
0x08, 0xE1, 0xD0, 0x72, 0xD8, 0x8A, 0xB8, 0x5B, 0x7D, \
|
||||
0x08, 0x05, 0x11, 0xEC, 0x9E, 0x28, 0x23, 0x1B, 0x6D, \
|
||||
0x08, 0xE2, 0x4F, 0x8A, 0xB2, 0xA9, 0x29, 0x14, 0x13, \
|
||||
0x08, 0x05, 0xD1, 0x2E, 0x71, 0x6A, 0x51, 0x4C, 0x2C, \
|
||||
0x08, 0xE5, 0x80, 0x27, 0x42, 0xA4, 0x69, 0xB0, 0x7F, \
|
||||
0x08, 0x05, 0xAA, 0x81, 0x2A, 0xBD, 0x45, 0xE8, 0xA8, \
|
||||
0x08, 0xEA, 0xE4, 0xF0, 0x24, 0xC9, 0x9F, 0xCC, 0x3C, \
|
||||
0x08, 0x05, 0x08, 0xF5, 0x05, 0x04, 0x27, 0x62, 0x98, \
|
||||
0x08, 0xEA, 0x6B, 0x62, 0x84, 0xA1, 0xF9, 0x4A, 0xE2, \
|
||||
0x08, 0x05, 0xE9, 0x77, 0x05, 0x4F, 0x84, 0xEE, 0x35, \
|
||||
0x08, 0xE2, 0x43, 0xC3, 0x8D, 0xFB, 0xAD, 0x54, 0x25, \
|
||||
0x08, 0x05, 0x14, 0x06, 0x5E, 0x39, 0x36, 0x2F, 0x45, \
|
||||
0x08, 0xEA, 0x0C, 0x1C, 0x74, 0xD0, 0x11, 0xFC, 0x32, \
|
||||
0x08, 0x05, 0xDA, 0x38, 0xBA, 0x0E, 0x3C, 0xE7, 0x8B, \
|
||||
0x08, 0xEA, 0xB0, 0x09, 0xE6, 0xFF, 0x94, 0xBB, 0xA9, \
|
||||
0x08, 0x05, 0xD7, 0x11, 0x29, 0xFE, 0xDC, 0x71, 0xD5, \
|
||||
0x08, 0xEA, 0x7F, 0x83, 0xA7, 0x60, 0x90, 0x62, 0x18, \
|
||||
0x08, 0x05, 0x84, 0x7F, 0x6A, 0xD1, 0x91, 0xC6, 0x52, \
|
||||
0x08, 0xEA, 0x2A, 0xD8, 0x7B, 0x8E, 0x4A, 0x9F, 0x91, \
|
||||
0x08, 0x05, 0xBD, 0xAA, 0x9D, 0x16, 0x18, 0x06, 0x15, \
|
||||
0x08, 0xE2, 0x55, 0xAD, 0x2D, 0x0A, 0x14, 0x1F, 0x5D, \
|
||||
0x08, 0x05, 0xD3, 0xE0, 0x7C, 0x39, 0xCF, 0x01, 0xF0, \
|
||||
0x08, 0xEF, 0x3A, 0x91, 0x72, 0x6A, 0x03, 0xBB, 0x96, \
|
||||
0x08, 0xE7, 0x83, 0x6D, 0xA4, 0x92, 0xFC, 0x13, 0xA7, \
|
||||
0x08, 0xEF, 0xF8, 0xFD, 0xCF, 0x62, 0x07, 0x6F, 0x1E, \
|
||||
0x08, 0xE7, 0x4C, 0xEA, 0x4A, 0x75, 0x4F, 0xD6, 0xCF, \
|
||||
0x08, 0xE2, 0xF6, 0x11, 0xE4, 0x26, 0x0D, 0x4D, 0xC6, \
|
||||
0x08, 0x05, 0xFB, 0xBF, 0xE8, 0x07, 0x89, 0xC3, 0x51, \
|
||||
0x08, 0xEF, 0x82, 0x27, 0x04, 0x3F, 0x96, 0xA8, 0x58, \
|
||||
0x08, 0xE7, 0x41, 0x29, 0x3C, 0x75, 0x2A, 0x03, 0x1C, \
|
||||
0x08, 0xEF, 0xAF, 0x59, 0x98, 0x36, 0xAA, 0x0F, 0x06, \
|
||||
0x08, 0xE6, 0xF6, 0x93, 0x41, 0x2D, 0xEC, 0x0E, 0x99, \
|
||||
0x08, 0x05, 0x29, 0x19, 0x90, 0xE5, 0xAA, 0x36, 0x40, \
|
||||
0x08, 0xE7, 0xFB, 0x68, 0x10, 0x7D, 0x77, 0x5D, 0xC0, \
|
||||
0x08, 0xE7, 0xCB, 0xB4, 0xDD, 0xCE, 0x90, 0x54, 0xBE, \
|
||||
0x08, 0xE7, 0x72, 0x8A, 0xD6, 0x02, 0xF4, 0xDD, 0xCC, \
|
||||
0x08, 0xE7, 0x6A, 0x21, 0x0B, 0x02, 0x86, 0xEC, 0x15, \
|
||||
0x08, 0xE7, 0x7B, 0x7C, 0x3D, 0x6B, 0x81, 0x03, 0xD0, \
|
||||
0x08, 0xEF, 0x7D, 0x61, 0x36, 0x94, 0x7C, 0xA0, 0xDF, \
|
||||
0x08, 0xEF, 0xCC, 0x85, 0x3B, 0xDA, 0xE0, 0x5C, 0x1C, \
|
||||
0x08, 0xE7, 0xE3, 0x75, 0xBB, 0x39, 0x22, 0x4B, 0xA8, \
|
||||
0x08, 0xEF, 0xF9, 0xCE, 0xE0, 0x5E, 0xEB, 0x1D, 0xCB, \
|
||||
0x08, 0xE7, 0xBD, 0xE2, 0x70, 0xD5, 0xAB, 0x4E, 0x3F, \
|
||||
0x08, 0xE7, 0xB7, 0x8D, 0x20, 0x68, 0x6B, 0x09, 0x52, \
|
||||
0x08, 0xEF, 0xA1, 0x1B, 0x90, 0xCD, 0x98, 0x00, 0x63, \
|
||||
0x08, 0xEF, 0x54, 0x67, 0x5D, 0x9C, 0x11, 0xFC, 0x45, \
|
||||
0x08, 0xE7, 0xD4, 0x9B, 0xC8, 0x97, 0xBE, 0x8A, 0x07, \
|
||||
0x08, 0xEF, 0x52, 0x8D, 0x90, 0x63, 0x73, 0xD5, 0x2A, \
|
||||
0x08, 0xEF, 0x03, 0xBC, 0x6E, 0x1C, 0x76, 0xBE, 0x4A, \
|
||||
0x08, 0xE7, 0xC2, 0xED, 0x67, 0xBA, 0x5E, 0x66, 0x21, \
|
||||
0x08, 0xEF, 0xE7, 0x3F, 0x87, 0xBE, 0xE0, 0x7A, 0x6D, \
|
||||
0x08, 0xE7, 0xC9, 0x70, 0x93, 0x1D, 0x64, 0xF5, 0x6C, \
|
||||
0x08, 0xEF, 0xF5, 0x28, 0x08, 0x34, 0xB3, 0xB6, 0x2C, \
|
||||
0x08, 0xEF, 0x3A, 0x0A, 0xEC, 0x0F, 0xDB, 0x56, 0xCA, \
|
||||
0x08, 0xEF, 0x39, 0xA0, 0x6E, 0xED, 0x79, 0xD0, 0x24, \
|
||||
0x08, 0xE7, 0x6C, 0x0B, 0xAF, 0xA9, 0x4E, 0x40, 0xB5, \
|
||||
0x08, 0xE9, 0xB9, 0xAF, 0xBF, 0x25, 0x50, 0xD1, 0x37, \
|
||||
0x08, 0x05, 0x9E, 0xDB, 0xDE, 0x3F, 0x94, 0xE9, 0x6B, \
|
||||
0x08, 0xEC, 0xC5, 0x05, 0xAA, 0x57, 0xDC, 0x8A, 0x5E, \
|
||||
0x08, 0x05, 0x70, 0xDA, 0x84, 0x84, 0xDD, 0xCA, 0x90, \
|
||||
0x07, 0x02, 0x81, 0x00, 0x01, 0xC9, 0xC3, 0x80, \
|
||||
0x08, 0x13, 0x00, 0x20, 0x21, 0x20, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x00, 0x52, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x05, 0x11, 0x10, 0x01, 0x04, 0x21, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x03, 0x00, 0x07, 0x02, 0x71, 0x00, 0x05, 0xC9, 0xC3, 0x80, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0xD2, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x01, 0x00, 0x08, 0x02, 0x80, 0x00, 0xB0, 0x10, 0x0C, 0xE8, 0x00, 0x4E, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x06, 0x8D, 0xB9, 0x00, 0x00, 0x02, 0xC0, 0x08, 0x00, 0x12, 0x00, 0x69, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x01, 0x5C, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE0, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x11, 0x11, 0x11, 0x80, 0x1A, 0x20, 0x00, 0x00, 0x28, 0x0C, 0xA4, 0x23, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x45, 0x03, 0x00, 0x85, 0x01, 0x00, \
|
||||
0x08, 0x11, 0x20, 0x04, 0x4B, 0x06, 0x09, 0x10, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x94, 0x0D, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x03, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x04, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, \
|
||||
0x05, 0x11, 0x22, 0x01, 0x03, 0x1D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x2C, 0x0E, 0x0B, 0x04, 0x0C, 0x73, 0x03, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x3B, 0x0B, 0x00, 0x00, 0x20, 0xC5, 0x20, 0xFA, \
|
||||
0x08, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x17, 0x56, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x17, 0x13, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x01, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x07, 0x11, 0x01, 0x03, 0x00, 0x03, 0x33, 0x01, \
|
||||
0x08, 0x11, 0x02, 0x04, 0x00, 0x04, 0x06, 0x0A, 0x09, \
|
||||
0x0D, 0x11, 0x10, 0x09, 0x00, 0x10, 0x14, 0x00, 0xFF, 0x31, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0A, 0x11, 0x11, 0x06, 0x00, 0x0A, 0x45, 0xD2, 0xCC, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x00, 0x04, 0x01, 0x08, 0xFF, 0xFF, 0x20, 0x22, 0x00, 0x2A, 0x01, 0x5A, 0x30, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x0C, 0x40, 0x00, 0x01, 0x16, 0x80, 0x00, 0x3F, 0x12, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x09, 0x11, 0x12, 0x05, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x08, 0x11, 0x12, 0x04, 0x36, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x05, 0x00, 0x07, 0x2D, 0xC6, 0xC0, 0x01, 0xC9, 0xC3, 0x80, 0x00, 0x7A, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0xE1, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x05, 0x00, 0x08, 0x02, 0x80, 0x00, 0x00, 0x30, 0x00, 0xE8, 0x00, 0x64, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x05, 0x1E, 0xB8, 0x05, 0x1F, 0x02, 0x02, 0x00, 0x00, 0x23, 0x8F, 0xFF, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x03, 0x37, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE2, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x22, 0x0B, 0x0B, 0x00, 0x1A, 0x15, 0x55, 0x00, 0x28, 0x0C, 0xA4, 0x23, \
|
||||
0x0E, 0x11, 0x20, 0x0A, 0x45, 0x03, 0x00, 0xD0, 0x01, 0x00, 0xFF, 0x08, 0x02, 0x18, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x84, 0x0D, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x03, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x06, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0xA2, 0x81, 0x26, 0xAF, 0x3F, 0xEE, 0xC8, 0xC7, 0xDB, 0xF2, 0x02, 0x08, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x07, 0x03, 0x15, 0xFC, 0x0F, 0x00, 0xA2, 0x81, 0x26, 0xAF, 0x3F, 0xEE, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xC8, 0xC7, 0xDB, 0xF2, 0x02, 0x08, 0x07, 0x03, 0x15, 0xFC, 0x0F, 0x00, \
|
||||
0x08, 0x11, 0x22, 0x04, 0x00, 0x08, 0x7F, 0x00, 0x3D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x01, 0x05, 0x0B, 0x05, 0x02, 0x00, 0x03, \
|
||||
0x10, 0x11, 0x30, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x39, 0x0B, 0x33, 0x33, 0x20, 0xC5, 0x20, 0xFA, \
|
||||
0x00 \
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
#define RADIO_CONFIGURATION_DATA_ARRAY_24 { \
|
||||
0x08, 0x04, 0x21, 0x71, 0x4B, 0x00, 0x00, 0xDC, 0x95, \
|
||||
0x08, 0x05, 0xA6, 0x22, 0x21, 0xF0, 0x41, 0x5B, 0x26, \
|
||||
0x08, 0xE2, 0x2F, 0x1C, 0xBB, 0x0A, 0xA8, 0x94, 0x28, \
|
||||
0x08, 0x05, 0x87, 0x67, 0xE2, 0x58, 0x1A, 0x07, 0x5B, \
|
||||
0x08, 0xE1, 0xD0, 0x72, 0xD8, 0x8A, 0xB8, 0x5B, 0x7D, \
|
||||
0x08, 0x05, 0x11, 0xEC, 0x9E, 0x28, 0x23, 0x1B, 0x6D, \
|
||||
0x08, 0xE2, 0x4F, 0x8A, 0xB2, 0xA9, 0x29, 0x14, 0x13, \
|
||||
0x08, 0x05, 0xD1, 0x2E, 0x71, 0x6A, 0x51, 0x4C, 0x2C, \
|
||||
0x08, 0xE5, 0x80, 0x27, 0x42, 0xA4, 0x69, 0xB0, 0x7F, \
|
||||
0x08, 0x05, 0xAA, 0x81, 0x2A, 0xBD, 0x45, 0xE8, 0xA8, \
|
||||
0x08, 0xEA, 0xE4, 0xF0, 0x24, 0xC9, 0x9F, 0xCC, 0x3C, \
|
||||
0x08, 0x05, 0x08, 0xF5, 0x05, 0x04, 0x27, 0x62, 0x98, \
|
||||
0x08, 0xEA, 0x6B, 0x62, 0x84, 0xA1, 0xF9, 0x4A, 0xE2, \
|
||||
0x08, 0x05, 0xE9, 0x77, 0x05, 0x4F, 0x84, 0xEE, 0x35, \
|
||||
0x08, 0xE2, 0x43, 0xC3, 0x8D, 0xFB, 0xAD, 0x54, 0x25, \
|
||||
0x08, 0x05, 0x14, 0x06, 0x5E, 0x39, 0x36, 0x2F, 0x45, \
|
||||
0x08, 0xEA, 0x0C, 0x1C, 0x74, 0xD0, 0x11, 0xFC, 0x32, \
|
||||
0x08, 0x05, 0xDA, 0x38, 0xBA, 0x0E, 0x3C, 0xE7, 0x8B, \
|
||||
0x08, 0xEA, 0xB0, 0x09, 0xE6, 0xFF, 0x94, 0xBB, 0xA9, \
|
||||
0x08, 0x05, 0xD7, 0x11, 0x29, 0xFE, 0xDC, 0x71, 0xD5, \
|
||||
0x08, 0xEA, 0x7F, 0x83, 0xA7, 0x60, 0x90, 0x62, 0x18, \
|
||||
0x08, 0x05, 0x84, 0x7F, 0x6A, 0xD1, 0x91, 0xC6, 0x52, \
|
||||
0x08, 0xEA, 0x2A, 0xD8, 0x7B, 0x8E, 0x4A, 0x9F, 0x91, \
|
||||
0x08, 0x05, 0xBD, 0xAA, 0x9D, 0x16, 0x18, 0x06, 0x15, \
|
||||
0x08, 0xE2, 0x55, 0xAD, 0x2D, 0x0A, 0x14, 0x1F, 0x5D, \
|
||||
0x08, 0x05, 0xD3, 0xE0, 0x7C, 0x39, 0xCF, 0x01, 0xF0, \
|
||||
0x08, 0xEF, 0x3A, 0x91, 0x72, 0x6A, 0x03, 0xBB, 0x96, \
|
||||
0x08, 0xE7, 0x83, 0x6D, 0xA4, 0x92, 0xFC, 0x13, 0xA7, \
|
||||
0x08, 0xEF, 0xF8, 0xFD, 0xCF, 0x62, 0x07, 0x6F, 0x1E, \
|
||||
0x08, 0xE7, 0x4C, 0xEA, 0x4A, 0x75, 0x4F, 0xD6, 0xCF, \
|
||||
0x08, 0xE2, 0xF6, 0x11, 0xE4, 0x26, 0x0D, 0x4D, 0xC6, \
|
||||
0x08, 0x05, 0xFB, 0xBF, 0xE8, 0x07, 0x89, 0xC3, 0x51, \
|
||||
0x08, 0xEF, 0x82, 0x27, 0x04, 0x3F, 0x96, 0xA8, 0x58, \
|
||||
0x08, 0xE7, 0x41, 0x29, 0x3C, 0x75, 0x2A, 0x03, 0x1C, \
|
||||
0x08, 0xEF, 0xAF, 0x59, 0x98, 0x36, 0xAA, 0x0F, 0x06, \
|
||||
0x08, 0xE6, 0xF6, 0x93, 0x41, 0x2D, 0xEC, 0x0E, 0x99, \
|
||||
0x08, 0x05, 0x29, 0x19, 0x90, 0xE5, 0xAA, 0x36, 0x40, \
|
||||
0x08, 0xE7, 0xFB, 0x68, 0x10, 0x7D, 0x77, 0x5D, 0xC0, \
|
||||
0x08, 0xE7, 0xCB, 0xB4, 0xDD, 0xCE, 0x90, 0x54, 0xBE, \
|
||||
0x08, 0xE7, 0x72, 0x8A, 0xD6, 0x02, 0xF4, 0xDD, 0xCC, \
|
||||
0x08, 0xE7, 0x6A, 0x21, 0x0B, 0x02, 0x86, 0xEC, 0x15, \
|
||||
0x08, 0xE7, 0x7B, 0x7C, 0x3D, 0x6B, 0x81, 0x03, 0xD0, \
|
||||
0x08, 0xEF, 0x7D, 0x61, 0x36, 0x94, 0x7C, 0xA0, 0xDF, \
|
||||
0x08, 0xEF, 0xCC, 0x85, 0x3B, 0xDA, 0xE0, 0x5C, 0x1C, \
|
||||
0x08, 0xE7, 0xE3, 0x75, 0xBB, 0x39, 0x22, 0x4B, 0xA8, \
|
||||
0x08, 0xEF, 0xF9, 0xCE, 0xE0, 0x5E, 0xEB, 0x1D, 0xCB, \
|
||||
0x08, 0xE7, 0xBD, 0xE2, 0x70, 0xD5, 0xAB, 0x4E, 0x3F, \
|
||||
0x08, 0xE7, 0xB7, 0x8D, 0x20, 0x68, 0x6B, 0x09, 0x52, \
|
||||
0x08, 0xEF, 0xA1, 0x1B, 0x90, 0xCD, 0x98, 0x00, 0x63, \
|
||||
0x08, 0xEF, 0x54, 0x67, 0x5D, 0x9C, 0x11, 0xFC, 0x45, \
|
||||
0x08, 0xE7, 0xD4, 0x9B, 0xC8, 0x97, 0xBE, 0x8A, 0x07, \
|
||||
0x08, 0xEF, 0x52, 0x8D, 0x90, 0x63, 0x73, 0xD5, 0x2A, \
|
||||
0x08, 0xEF, 0x03, 0xBC, 0x6E, 0x1C, 0x76, 0xBE, 0x4A, \
|
||||
0x08, 0xE7, 0xC2, 0xED, 0x67, 0xBA, 0x5E, 0x66, 0x21, \
|
||||
0x08, 0xEF, 0xE7, 0x3F, 0x87, 0xBE, 0xE0, 0x7A, 0x6D, \
|
||||
0x08, 0xE7, 0xC9, 0x70, 0x93, 0x1D, 0x64, 0xF5, 0x6C, \
|
||||
0x08, 0xEF, 0xF5, 0x28, 0x08, 0x34, 0xB3, 0xB6, 0x2C, \
|
||||
0x08, 0xEF, 0x3A, 0x0A, 0xEC, 0x0F, 0xDB, 0x56, 0xCA, \
|
||||
0x08, 0xEF, 0x39, 0xA0, 0x6E, 0xED, 0x79, 0xD0, 0x24, \
|
||||
0x08, 0xE7, 0x6C, 0x0B, 0xAF, 0xA9, 0x4E, 0x40, 0xB5, \
|
||||
0x08, 0xE9, 0xB9, 0xAF, 0xBF, 0x25, 0x50, 0xD1, 0x37, \
|
||||
0x08, 0x05, 0x9E, 0xDB, 0xDE, 0x3F, 0x94, 0xE9, 0x6B, \
|
||||
0x08, 0xEC, 0xC5, 0x05, 0xAA, 0x57, 0xDC, 0x8A, 0x5E, \
|
||||
0x08, 0x05, 0x70, 0xDA, 0x84, 0x84, 0xDD, 0xCA, 0x90, \
|
||||
0x07, 0x02, 0x81, 0x00, 0x01, 0xC9, 0xC3, 0x80, \
|
||||
0x08, 0x13, 0x00, 0x20, 0x21, 0x20, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x00, 0x52, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x05, 0x11, 0x10, 0x01, 0x04, 0x21, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x03, 0x00, 0x07, 0x02, 0x71, 0x00, 0x05, 0xC9, 0xC3, 0x80, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0x46, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x01, 0x00, 0x08, 0x03, 0x80, 0x00, 0xB0, 0x10, 0x0C, 0xE8, 0x00, 0x4E, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x06, 0x8D, 0xB9, 0x00, 0x00, 0x02, 0xC0, 0x08, 0x00, 0x12, 0x00, 0x23, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x01, 0x5C, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE0, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x11, 0x11, 0x11, 0x80, 0x1A, 0x20, 0x00, 0x00, 0x28, 0x0C, 0xA4, 0x23, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x45, 0x03, 0x00, 0x85, 0x01, 0x00, \
|
||||
0x08, 0x11, 0x20, 0x04, 0x4B, 0x06, 0x09, 0x10, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x94, 0x0A, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x03, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x04, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, \
|
||||
0x05, 0x11, 0x22, 0x01, 0x03, 0x1D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x2C, 0x0E, 0x0B, 0x04, 0x0C, 0x73, 0x03, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x37, 0x09, 0x00, 0x00, 0x0A, 0xEC, 0x20, 0xFE, \
|
||||
0x08, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x17, 0x56, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x17, 0x13, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x01, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x07, 0x11, 0x01, 0x03, 0x00, 0x03, 0x33, 0x01, \
|
||||
0x08, 0x11, 0x02, 0x04, 0x00, 0x04, 0x06, 0x0A, 0x09, \
|
||||
0x0D, 0x11, 0x10, 0x09, 0x00, 0x10, 0x14, 0x00, 0xFF, 0x31, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0A, 0x11, 0x11, 0x06, 0x00, 0x0A, 0x45, 0xD2, 0xCC, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x00, 0x04, 0x01, 0x08, 0xFF, 0xFF, 0x20, 0x22, 0x00, 0x2A, 0x01, 0x5A, 0x30, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x0C, 0x40, 0x00, 0x01, 0x16, 0x80, 0x00, 0x3F, 0x12, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x09, 0x11, 0x12, 0x05, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x08, 0x11, 0x12, 0x04, 0x36, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x05, 0x00, 0x07, 0x4C, 0x4B, 0x40, 0x01, 0xC9, 0xC3, 0x80, 0x00, 0x44, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0x44, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x05, 0x00, 0x08, 0x03, 0x80, 0x00, 0x00, 0x30, 0x00, 0xE8, 0x00, 0x3C, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x08, 0x88, 0x89, 0x07, 0xFF, 0x02, 0x02, 0x00, 0x00, 0x23, 0x8F, 0xFF, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x01, 0x7C, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE2, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x22, 0x07, 0x07, 0x00, 0x1A, 0x15, 0x55, 0x00, 0x27, 0x0C, 0xA4, 0x23, \
|
||||
0x0E, 0x11, 0x20, 0x0A, 0x45, 0x03, 0x01, 0x5A, 0x01, 0x00, 0xFF, 0x08, 0x02, 0x18, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x84, 0x0A, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x04, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x0A, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0xFF, 0xBA, 0x0F, 0x51, 0xCF, 0xA9, 0xC9, 0xFC, 0x1B, 0x1E, 0x0F, 0x01, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0xFC, 0xFD, 0x15, 0xFF, 0x00, 0x0F, 0xFF, 0xBA, 0x0F, 0x51, 0xCF, 0xA9, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xC9, 0xFC, 0x1B, 0x1E, 0x0F, 0x01, 0xFC, 0xFD, 0x15, 0xFF, 0x00, 0x0F, \
|
||||
0x08, 0x11, 0x22, 0x04, 0x00, 0x08, 0x7F, 0x00, 0x5D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x01, 0x05, 0x0B, 0x05, 0x02, 0x00, 0x03, \
|
||||
0x10, 0x11, 0x30, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x38, 0x0A, 0xAA, 0xAA, 0x0A, 0xEC, 0x20, 0xFE, \
|
||||
0x00 \
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
#define RADIO_CONFIGURATION_DATA_ARRAY_24 { \
|
||||
0x08, 0x04, 0x21, 0x71, 0x4B, 0x00, 0x00, 0xDC, 0x95, \
|
||||
0x08, 0x05, 0xA6, 0x22, 0x21, 0xF0, 0x41, 0x5B, 0x26, \
|
||||
0x08, 0xE2, 0x2F, 0x1C, 0xBB, 0x0A, 0xA8, 0x94, 0x28, \
|
||||
0x08, 0x05, 0x87, 0x67, 0xE2, 0x58, 0x1A, 0x07, 0x5B, \
|
||||
0x08, 0xE1, 0xD0, 0x72, 0xD8, 0x8A, 0xB8, 0x5B, 0x7D, \
|
||||
0x08, 0x05, 0x11, 0xEC, 0x9E, 0x28, 0x23, 0x1B, 0x6D, \
|
||||
0x08, 0xE2, 0x4F, 0x8A, 0xB2, 0xA9, 0x29, 0x14, 0x13, \
|
||||
0x08, 0x05, 0xD1, 0x2E, 0x71, 0x6A, 0x51, 0x4C, 0x2C, \
|
||||
0x08, 0xE5, 0x80, 0x27, 0x42, 0xA4, 0x69, 0xB0, 0x7F, \
|
||||
0x08, 0x05, 0xAA, 0x81, 0x2A, 0xBD, 0x45, 0xE8, 0xA8, \
|
||||
0x08, 0xEA, 0xE4, 0xF0, 0x24, 0xC9, 0x9F, 0xCC, 0x3C, \
|
||||
0x08, 0x05, 0x08, 0xF5, 0x05, 0x04, 0x27, 0x62, 0x98, \
|
||||
0x08, 0xEA, 0x6B, 0x62, 0x84, 0xA1, 0xF9, 0x4A, 0xE2, \
|
||||
0x08, 0x05, 0xE9, 0x77, 0x05, 0x4F, 0x84, 0xEE, 0x35, \
|
||||
0x08, 0xE2, 0x43, 0xC3, 0x8D, 0xFB, 0xAD, 0x54, 0x25, \
|
||||
0x08, 0x05, 0x14, 0x06, 0x5E, 0x39, 0x36, 0x2F, 0x45, \
|
||||
0x08, 0xEA, 0x0C, 0x1C, 0x74, 0xD0, 0x11, 0xFC, 0x32, \
|
||||
0x08, 0x05, 0xDA, 0x38, 0xBA, 0x0E, 0x3C, 0xE7, 0x8B, \
|
||||
0x08, 0xEA, 0xB0, 0x09, 0xE6, 0xFF, 0x94, 0xBB, 0xA9, \
|
||||
0x08, 0x05, 0xD7, 0x11, 0x29, 0xFE, 0xDC, 0x71, 0xD5, \
|
||||
0x08, 0xEA, 0x7F, 0x83, 0xA7, 0x60, 0x90, 0x62, 0x18, \
|
||||
0x08, 0x05, 0x84, 0x7F, 0x6A, 0xD1, 0x91, 0xC6, 0x52, \
|
||||
0x08, 0xEA, 0x2A, 0xD8, 0x7B, 0x8E, 0x4A, 0x9F, 0x91, \
|
||||
0x08, 0x05, 0xBD, 0xAA, 0x9D, 0x16, 0x18, 0x06, 0x15, \
|
||||
0x08, 0xE2, 0x55, 0xAD, 0x2D, 0x0A, 0x14, 0x1F, 0x5D, \
|
||||
0x08, 0x05, 0xD3, 0xE0, 0x7C, 0x39, 0xCF, 0x01, 0xF0, \
|
||||
0x08, 0xEF, 0x3A, 0x91, 0x72, 0x6A, 0x03, 0xBB, 0x96, \
|
||||
0x08, 0xE7, 0x83, 0x6D, 0xA4, 0x92, 0xFC, 0x13, 0xA7, \
|
||||
0x08, 0xEF, 0xF8, 0xFD, 0xCF, 0x62, 0x07, 0x6F, 0x1E, \
|
||||
0x08, 0xE7, 0x4C, 0xEA, 0x4A, 0x75, 0x4F, 0xD6, 0xCF, \
|
||||
0x08, 0xE2, 0xF6, 0x11, 0xE4, 0x26, 0x0D, 0x4D, 0xC6, \
|
||||
0x08, 0x05, 0xFB, 0xBF, 0xE8, 0x07, 0x89, 0xC3, 0x51, \
|
||||
0x08, 0xEF, 0x82, 0x27, 0x04, 0x3F, 0x96, 0xA8, 0x58, \
|
||||
0x08, 0xE7, 0x41, 0x29, 0x3C, 0x75, 0x2A, 0x03, 0x1C, \
|
||||
0x08, 0xEF, 0xAF, 0x59, 0x98, 0x36, 0xAA, 0x0F, 0x06, \
|
||||
0x08, 0xE6, 0xF6, 0x93, 0x41, 0x2D, 0xEC, 0x0E, 0x99, \
|
||||
0x08, 0x05, 0x29, 0x19, 0x90, 0xE5, 0xAA, 0x36, 0x40, \
|
||||
0x08, 0xE7, 0xFB, 0x68, 0x10, 0x7D, 0x77, 0x5D, 0xC0, \
|
||||
0x08, 0xE7, 0xCB, 0xB4, 0xDD, 0xCE, 0x90, 0x54, 0xBE, \
|
||||
0x08, 0xE7, 0x72, 0x8A, 0xD6, 0x02, 0xF4, 0xDD, 0xCC, \
|
||||
0x08, 0xE7, 0x6A, 0x21, 0x0B, 0x02, 0x86, 0xEC, 0x15, \
|
||||
0x08, 0xE7, 0x7B, 0x7C, 0x3D, 0x6B, 0x81, 0x03, 0xD0, \
|
||||
0x08, 0xEF, 0x7D, 0x61, 0x36, 0x94, 0x7C, 0xA0, 0xDF, \
|
||||
0x08, 0xEF, 0xCC, 0x85, 0x3B, 0xDA, 0xE0, 0x5C, 0x1C, \
|
||||
0x08, 0xE7, 0xE3, 0x75, 0xBB, 0x39, 0x22, 0x4B, 0xA8, \
|
||||
0x08, 0xEF, 0xF9, 0xCE, 0xE0, 0x5E, 0xEB, 0x1D, 0xCB, \
|
||||
0x08, 0xE7, 0xBD, 0xE2, 0x70, 0xD5, 0xAB, 0x4E, 0x3F, \
|
||||
0x08, 0xE7, 0xB7, 0x8D, 0x20, 0x68, 0x6B, 0x09, 0x52, \
|
||||
0x08, 0xEF, 0xA1, 0x1B, 0x90, 0xCD, 0x98, 0x00, 0x63, \
|
||||
0x08, 0xEF, 0x54, 0x67, 0x5D, 0x9C, 0x11, 0xFC, 0x45, \
|
||||
0x08, 0xE7, 0xD4, 0x9B, 0xC8, 0x97, 0xBE, 0x8A, 0x07, \
|
||||
0x08, 0xEF, 0x52, 0x8D, 0x90, 0x63, 0x73, 0xD5, 0x2A, \
|
||||
0x08, 0xEF, 0x03, 0xBC, 0x6E, 0x1C, 0x76, 0xBE, 0x4A, \
|
||||
0x08, 0xE7, 0xC2, 0xED, 0x67, 0xBA, 0x5E, 0x66, 0x21, \
|
||||
0x08, 0xEF, 0xE7, 0x3F, 0x87, 0xBE, 0xE0, 0x7A, 0x6D, \
|
||||
0x08, 0xE7, 0xC9, 0x70, 0x93, 0x1D, 0x64, 0xF5, 0x6C, \
|
||||
0x08, 0xEF, 0xF5, 0x28, 0x08, 0x34, 0xB3, 0xB6, 0x2C, \
|
||||
0x08, 0xEF, 0x3A, 0x0A, 0xEC, 0x0F, 0xDB, 0x56, 0xCA, \
|
||||
0x08, 0xEF, 0x39, 0xA0, 0x6E, 0xED, 0x79, 0xD0, 0x24, \
|
||||
0x08, 0xE7, 0x6C, 0x0B, 0xAF, 0xA9, 0x4E, 0x40, 0xB5, \
|
||||
0x08, 0xE9, 0xB9, 0xAF, 0xBF, 0x25, 0x50, 0xD1, 0x37, \
|
||||
0x08, 0x05, 0x9E, 0xDB, 0xDE, 0x3F, 0x94, 0xE9, 0x6B, \
|
||||
0x08, 0xEC, 0xC5, 0x05, 0xAA, 0x57, 0xDC, 0x8A, 0x5E, \
|
||||
0x08, 0x05, 0x70, 0xDA, 0x84, 0x84, 0xDD, 0xCA, 0x90, \
|
||||
0x07, 0x02, 0x81, 0x00, 0x01, 0xC9, 0xC3, 0x80, \
|
||||
0x08, 0x13, 0x00, 0x20, 0x21, 0x20, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x00, 0x52, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x05, 0x11, 0x10, 0x01, 0x04, 0x21, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x03, 0x00, 0x07, 0x02, 0x71, 0x00, 0x05, 0xC9, 0xC3, 0x80, 0x00, 0x00, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0xD2, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x01, 0x00, 0x08, 0x02, 0x80, 0x00, 0xB0, 0x10, 0x0C, 0xE8, 0x00, 0x4E, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x06, 0x8D, 0xB9, 0x00, 0x00, 0x02, 0xC0, 0x08, 0x00, 0x12, 0x00, 0x69, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x01, 0x5C, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE0, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x11, 0x11, 0x11, 0x80, 0x1A, 0x20, 0x00, 0x00, 0x28, 0x0C, 0xA4, 0x23, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x45, 0x03, 0x00, 0x85, 0x01, 0x00, \
|
||||
0x08, 0x11, 0x20, 0x04, 0x4B, 0x06, 0x09, 0x10, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x94, 0x0D, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x03, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x04, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, 0x7E, 0x64, 0x1B, 0xBA, 0x58, 0x0B, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xDD, 0xCE, 0xD6, 0xE6, 0xF6, 0x00, 0x03, 0x03, 0x15, 0xF0, 0x3F, 0x00, \
|
||||
0x05, 0x11, 0x22, 0x01, 0x03, 0x1D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x2C, 0x0E, 0x0B, 0x04, 0x0C, 0x73, 0x03, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x3B, 0x0B, 0x00, 0x00, 0x20, 0xC5, 0x20, 0xFA, \
|
||||
0x08, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x05, 0x17, 0x56, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x17, 0x13, 0x10, 0xCA, 0xF0, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x01, 0x00, \
|
||||
0x05, 0x11, 0x00, 0x01, 0x03, 0x20, \
|
||||
0x07, 0x11, 0x01, 0x03, 0x00, 0x03, 0x33, 0x01, \
|
||||
0x08, 0x11, 0x02, 0x04, 0x00, 0x04, 0x06, 0x0A, 0x09, \
|
||||
0x0D, 0x11, 0x10, 0x09, 0x00, 0x10, 0x14, 0x00, 0xFF, 0x31, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0A, 0x11, 0x11, 0x06, 0x00, 0x0A, 0x45, 0xD2, 0xCC, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x00, 0x04, 0x01, 0x08, 0xFF, 0xFF, 0x20, 0x22, 0x00, 0x2A, 0x01, 0x5A, 0x30, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x0C, 0x40, 0x00, 0x01, 0x16, 0x80, 0x00, 0x3F, 0x12, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x12, 0x0C, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x09, 0x11, 0x12, 0x05, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x08, 0x11, 0x12, 0x04, 0x36, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x00, 0x05, 0x00, 0x07, 0x4C, 0x4B, 0x40, 0x01, 0xC9, 0xC3, 0x80, 0x00, 0xCC, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x0C, 0xCD, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x18, 0x05, 0x00, 0x08, 0x02, 0x80, 0x00, 0x00, 0x30, 0x00, 0xE8, 0x00, 0x3C, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x24, 0x08, 0x88, 0x89, 0x07, 0xFF, 0x02, 0x02, 0x00, 0x00, 0x23, 0x8F, 0xFF, \
|
||||
0x07, 0x11, 0x20, 0x03, 0x30, 0x04, 0x74, 0xA0, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x35, 0xE2, \
|
||||
0x10, 0x11, 0x20, 0x0C, 0x38, 0x22, 0x07, 0x07, 0x00, 0x1A, 0x15, 0x55, 0x00, 0x27, 0x0C, 0xA4, 0x23, \
|
||||
0x0E, 0x11, 0x20, 0x0A, 0x45, 0x03, 0x01, 0x5A, 0x01, 0x00, 0xFF, 0x08, 0x02, 0x18, 0x40, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x50, 0x84, 0x0D, \
|
||||
0x06, 0x11, 0x20, 0x02, 0x54, 0x04, 0x07, \
|
||||
0x05, 0x11, 0x20, 0x01, 0x57, 0x00, \
|
||||
0x09, 0x11, 0x20, 0x05, 0x5B, 0x40, 0x04, 0x0A, 0x78, 0x20, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x00, 0xFF, 0xBA, 0x0F, 0x51, 0xCF, 0xA9, 0xC9, 0xFC, 0x1B, 0x1E, 0x0F, 0x01, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x0C, 0xFC, 0xFD, 0x15, 0xFF, 0x00, 0x0F, 0xFF, 0xBA, 0x0F, 0x51, 0xCF, 0xA9, \
|
||||
0x10, 0x11, 0x21, 0x0C, 0x18, 0xC9, 0xFC, 0x1B, 0x1E, 0x0F, 0x01, 0xFC, 0xFD, 0x15, 0xFF, 0x00, 0x0F, \
|
||||
0x08, 0x11, 0x22, 0x04, 0x00, 0x08, 0x7F, 0x00, 0x5D, \
|
||||
0x0B, 0x11, 0x23, 0x07, 0x00, 0x01, 0x05, 0x0B, 0x05, 0x02, 0x00, 0x03, \
|
||||
0x10, 0x11, 0x30, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x0C, 0x11, 0x40, 0x08, 0x00, 0x39, 0x0B, 0x33, 0x33, 0x20, 0xC5, 0x20, 0xFA, \
|
||||
0x00 \
|
||||
}
|
||||
+458
@@ -0,0 +1,458 @@
|
||||
// This file is part of "NPR70 modem firmware" software
|
||||
// (A GMSK data modem for ham radio 430-440MHz, at several hundreds of kbps)
|
||||
// Copyright (c) 2017-2020 Guillaume F. F4HDK (amateur radio callsign)
|
||||
//
|
||||
// "NPR70 modem firmware" is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// "NPR70 modem firmware" is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with "NPR70 modem firmware". If not, see <http://www.gnu.org/licenses/>
|
||||
|
||||
#include "TDMA.h"
|
||||
#include "mbed.h"
|
||||
#include "L1L2_radio.h"
|
||||
#include "global_variables.h"
|
||||
|
||||
static unsigned char TDMA_table_uplink_st[radio_addr_table_size];
|
||||
static int TDMA_table_uplink_usage[radio_addr_table_size];
|
||||
static int TDMA_table_is_fast[radio_addr_table_size];
|
||||
//static long int TDMA_table_TA[radio_addr_table_size];
|
||||
static unsigned int TDMA_table_RX_time[radio_addr_table_size];
|
||||
static unsigned char TDMA_table_up2date[radio_addr_table_size];
|
||||
static unsigned char TDMA_table_slots[radio_addr_table_size];
|
||||
static unsigned int TDMA_table_offset[radio_addr_table_size];
|
||||
static unsigned char TDMA_frame_nb;
|
||||
static unsigned char master_allocated_slots;
|
||||
static unsigned int slave_alloc_RX_age = 2;
|
||||
static unsigned char my_multiframe_mask;
|
||||
static unsigned char my_multiframe_ID;
|
||||
//static unsigned int TDMA_slave_last_master_top = 0;
|
||||
static unsigned int TDMA_offset_multi_frame;
|
||||
|
||||
void TDMA_init_all(void) {
|
||||
int i;
|
||||
for (i=0; i<radio_addr_table_size; i++) {
|
||||
TDMA_table_uplink_st[i] = 0;
|
||||
TDMA_table_uplink_usage [i] = 32;
|
||||
TDMA_table_is_fast[i] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
unsigned char TDMA_byte_elaboration(unsigned char synchro) {
|
||||
unsigned char TDMA_byte;
|
||||
unsigned long int uplink_buffer_size;
|
||||
//unsigned long int uplink_buffer_size_temp;
|
||||
if (is_TDMA_master) { // TDMA Master
|
||||
TDMA_byte = 0x40;//uplink/downlink bit
|
||||
TDMA_byte = TDMA_byte + (TDMA_frame_nb & 0x1F);
|
||||
if (synchro) {
|
||||
TDMA_frame_nb++;
|
||||
}
|
||||
} else { // TDMA client
|
||||
TDMA_byte = 0x00; //uplink/downlink bit
|
||||
// uplink buffer size
|
||||
//uplink_buffer_size_temp = (TXPS_FIFO->last_ready - TXPS_FIFO->RD_point);
|
||||
//uplink_buffer_size = uplink_buffer_size_temp / 300; //number of frames
|
||||
uplink_buffer_size = compute_TX_buff_size_global();
|
||||
//if ( (uplink_buffer_size_temp % 300) > 0) {uplink_buffer_size++;}
|
||||
if (uplink_buffer_size > 30) {uplink_buffer_size = 30;}
|
||||
TDMA_byte = TDMA_byte + (uplink_buffer_size & 0x1F);
|
||||
}
|
||||
if (synchro) {
|
||||
TDMA_byte = TDMA_byte + 0x20;
|
||||
}
|
||||
TDMA_byte = TDMA_byte + parity_bit_elab[TDMA_byte & 0x7F]; // parity bit
|
||||
return TDMA_byte;
|
||||
}
|
||||
|
||||
short int TDMA_TA_measure_single_frame(unsigned int frame_timer, unsigned char TDMA_byte, unsigned char client_byte, int frame_size_loc) {
|
||||
int measured_offset = 0x7FFF;
|
||||
int TA_answer = 0x7FFF;
|
||||
unsigned char client_ID = 0xF0;
|
||||
unsigned char is_downlink;
|
||||
|
||||
is_downlink = TDMA_byte & 0x40;
|
||||
|
||||
if ( ((TDMA_byte & 0x20) == 0x20) && (is_downlink == 0) && (parity_bit_check[TDMA_byte]) && (parity_bit_check[client_byte]) ) { //first frame top-synchro
|
||||
client_ID = client_byte & 0x7F;
|
||||
if (CONF_master_FDD == 1) {
|
||||
measured_offset = frame_timer;
|
||||
} else {
|
||||
measured_offset = frame_timer - ((TDMA_slave_last_master_top & 0xFFFFFF));// + 10*TDMA_table_offset[client_ID]);
|
||||
}
|
||||
if (frame_size_loc < 114) {
|
||||
measured_offset = measured_offset + (114 - frame_size_loc) * 0.85;
|
||||
}
|
||||
if ( (client_ID < radio_addr_table_size) && (CONF_radio_addr_table_status[client_ID]) ) {
|
||||
TA_answer = measured_offset - (10*TDMA_table_offset[client_ID]);
|
||||
if ( (TA_answer > -200) && (TA_answer < 2000) ) {// -1000 .. 5000
|
||||
TDMA_table_TA[client_ID] = 0.9*TDMA_table_TA[client_ID] + 1*TA_answer;
|
||||
}
|
||||
//printf ("id:%i TA_single:%i TA_filt:%i\r\n", client_ID, TA_answer, TDMA_table_TA[client_ID]);
|
||||
}
|
||||
else if (client_ID == 0x7E) {
|
||||
TA_answer = measured_offset - (10*TDMA_offset_multi_frame);
|
||||
//printf ("id:%i TAth:%i\r\n", client_ID, TA_answer);
|
||||
}
|
||||
}
|
||||
return (short int)TA_answer;
|
||||
}
|
||||
|
||||
void TDMA_init_TA(unsigned char client_ID, int TA_input) {
|
||||
if ( (TA_input > -200) && (TA_input < 2000) ) {
|
||||
TDMA_table_TA[client_ID] = 10*TA_input;
|
||||
}
|
||||
}
|
||||
|
||||
void TDMA_top_measure(void) {
|
||||
TDMA_slave_last_master_top = GLOBAL_timer.read_us();
|
||||
TDMA_slave_last_master_top = TDMA_slave_last_master_top + 0;
|
||||
}
|
||||
|
||||
void TDMA_FDD_up_top_measure(void) {
|
||||
TDMA_slave_last_master_top = GLOBAL_timer.read_us();
|
||||
TDMA_slave_last_master_top = TDMA_slave_last_master_top + 0;
|
||||
RX_top_FDD_up_counter++;
|
||||
//printf("t\r\n");
|
||||
}
|
||||
|
||||
void TDMA_byte_RX_interp (unsigned char TDMA_byte, unsigned char client_ID_byte, unsigned char protocol, unsigned int RX_time) {
|
||||
// a traiter : top client / top master / frame client /
|
||||
unsigned char client_ID;
|
||||
unsigned char uplink_buffer_size;
|
||||
unsigned char TDMA_synchro;
|
||||
unsigned char is_downlink;
|
||||
unsigned int loc_time;
|
||||
TDMA_synchro = TDMA_byte & 0x20;
|
||||
is_downlink = TDMA_byte & 0x40;
|
||||
client_ID = client_ID_byte & 0x7F;
|
||||
if (parity_bit_check[TDMA_byte]) { // checks parity bit
|
||||
//if(1) {
|
||||
if (is_TDMA_master) { // TDMA Master
|
||||
if (is_downlink == 0) { //only uplink frames
|
||||
uplink_buffer_size = TDMA_byte & 0x1F;
|
||||
if ( (client_ID < radio_addr_table_size) && (parity_bit_check[client_ID_byte]) ) {
|
||||
TDMA_table_uplink_st[client_ID] = uplink_buffer_size;
|
||||
TDMA_table_up2date[client_ID] = 1;
|
||||
if (uplink_buffer_size > 1) { // force to fast slots
|
||||
TDMA_table_uplink_usage[client_ID] = 32;
|
||||
TDMA_table_is_fast[client_ID] = 1;
|
||||
}
|
||||
//printf("%i upl%i mem%i fast%i\r\n", client_ID, uplink_buffer_size, TDMA_table_uplink_usage[client_ID],TDMA_table_is_fast[client_ID]);
|
||||
if (TDMA_synchro) {
|
||||
TDMA_table_RX_time[client_ID] = RX_time;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else { // TDMA client
|
||||
TDMA_frame_nb = TDMA_byte & 0x1F;
|
||||
if ( (TDMA_synchro) && (is_downlink) ) { //(slave_alloc_RX_age < 2) ) {
|
||||
TDMA_slave_last_master_top = RX_time;
|
||||
//debug_counter ++;
|
||||
if ( (slave_alloc_RX_age < 2) && (CONF_radio_state_ON_OFF) ) {
|
||||
if ( (TDMA_frame_nb & my_multiframe_mask) == (my_multiframe_ID & my_multiframe_mask) ) {
|
||||
loc_time = GLOBAL_timer.read_us();
|
||||
time_next_TX_slave = ((RX_time + offset_time_TX_slave) & 0xFFFFFF );//!!!test TA june 2018 +380
|
||||
SI4463_prepa_TX_1_call.attach_us(&SI4463_prepa_TX_1, (time_next_TX_slave - loc_time - CONF_delay_prepTX1_2_TX) &0xFFFFFF );
|
||||
slave_alloc_RX_age++;
|
||||
slave_new_burst_tx_pending = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//TDMA_slave_timeout : allow 1 more burst if no TOP received from Master
|
||||
void TDMA_slave_timeout (void) {
|
||||
unsigned int loc_time;
|
||||
unsigned int master_top_age;
|
||||
loc_time = GLOBAL_timer.read_us();
|
||||
master_top_age = loc_time - TDMA_slave_last_master_top;
|
||||
if ( (master_top_age > (CONF_TDMA_frame_duration + 8000) ) && (master_top_age < (CONF_TDMA_frame_duration + 10000)) ) {
|
||||
if ( (slave_alloc_RX_age < 2) && (slave_new_burst_tx_pending == 0) && (CONF_radio_state_ON_OFF) ) {
|
||||
TDMA_frame_nb = (TDMA_frame_nb+1) & 0x1F;
|
||||
if ( (TDMA_frame_nb & my_multiframe_mask) == (my_multiframe_ID & my_multiframe_mask) ) {
|
||||
time_next_TX_slave = (TDMA_slave_last_master_top + CONF_TDMA_frame_duration + offset_time_TX_slave) & 0xFFFFFF;
|
||||
SI4463_prepa_TX_1_call.attach_us(&SI4463_prepa_TX_1, (time_next_TX_slave - loc_time - CONF_delay_prepTX1_2_TX) &0xFFFFFF );
|
||||
slave_alloc_RX_age++;
|
||||
slave_new_burst_tx_pending = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void TDMA_master_allocation () {
|
||||
int size_wo_FEC;
|
||||
int size_w_FEC;
|
||||
int i;
|
||||
int allocated_slots;
|
||||
int nb_fast_clients;
|
||||
unsigned int loc_time_offset;
|
||||
long int local_TA;
|
||||
unsigned int downlink_buffer_size;
|
||||
//unsigned int downlink_buffer_size_temp;
|
||||
static unsigned char TDMA_alloc_frame_raw[150];
|
||||
unsigned char rframe_length;
|
||||
unsigned char loc_client_needs[radio_addr_table_size];
|
||||
unsigned char loc_master_needs;
|
||||
unsigned char remaining_needs;
|
||||
|
||||
for (i=0; i<radio_addr_table_size; i++) {
|
||||
if ( (CONF_radio_addr_table_status[i]) && (TDMA_table_uplink_usage[i] > 0) ) {
|
||||
TDMA_table_is_fast[i] = 1;
|
||||
TDMA_table_uplink_usage[i]--;
|
||||
}
|
||||
}
|
||||
//if ((TDMA_frame_nb & 0x7) == 0) { // once every 8 frames
|
||||
if ((TDMA_frame_nb & 0x3) == 0) { // once every 4 frames
|
||||
TDMA_master_allocation_slow();
|
||||
}
|
||||
// ** TDMA allocation algorithm for fast slots **
|
||||
// 1) Master computes its own downlink buffer size
|
||||
//downlink_buffer_size_temp = (TXPS_FIFO->last_ready - TXPS_FIFO->RD_point);
|
||||
//downlink_buffer_size = downlink_buffer_size_temp / 300; //number of frames
|
||||
//if ((downlink_buffer_size_temp % 300) > 0) {downlink_buffer_size++;}
|
||||
downlink_buffer_size = compute_TX_buff_size_global();
|
||||
if (downlink_buffer_size > 30) {downlink_buffer_size = 30;}
|
||||
// 2) if no TDMA uplink received from client, lower its need
|
||||
for (i=0; i<radio_addr_table_size; i++) {
|
||||
if ( (CONF_radio_addr_table_status[i]) && (TDMA_table_up2date[i]==0) && (TDMA_table_uplink_st[i] > 0) ) {
|
||||
TDMA_table_uplink_st[i]--;
|
||||
}
|
||||
TDMA_table_up2date[i] = 0;
|
||||
}
|
||||
// 3) init allocation table
|
||||
// copy uplink state and allocate 1 slot to each active
|
||||
// Master
|
||||
loc_master_needs = downlink_buffer_size; // copy
|
||||
master_allocated_slots = 1;
|
||||
if (loc_master_needs>0) {loc_master_needs--;} // decrement
|
||||
allocated_slots = 1; // at least 1 for master
|
||||
// Clients
|
||||
nb_fast_clients = 0;
|
||||
for (i=0; i<radio_addr_table_size; i++) {
|
||||
if ( (CONF_radio_addr_table_status[i]) && (TDMA_table_is_fast[i]) ) {
|
||||
nb_fast_clients++;
|
||||
loc_client_needs[i] = TDMA_table_uplink_st[i]; // copy
|
||||
TDMA_table_slots[i] = 1; // allocate 1 slot
|
||||
if (loc_client_needs[i]>0) {loc_client_needs[i]--;} // decrement
|
||||
allocated_slots++;
|
||||
}
|
||||
}
|
||||
// 4) 1st allocation pass, round robin
|
||||
remaining_needs = 1;
|
||||
while ( (allocated_slots < 15) && (remaining_needs > 0) ) {
|
||||
// master
|
||||
if ( (loc_master_needs > 0) && (allocated_slots < 15) ) {
|
||||
master_allocated_slots++;
|
||||
loc_master_needs--;
|
||||
allocated_slots++;
|
||||
}
|
||||
if ( (loc_master_needs > 0) && (allocated_slots < 15) && (nb_fast_clients > 1) ) {// master counts 2 times if more than 1 client
|
||||
master_allocated_slots++;
|
||||
loc_master_needs--;
|
||||
allocated_slots++;
|
||||
}
|
||||
remaining_needs = loc_master_needs;
|
||||
for (i=0; i<radio_addr_table_size; i++) {
|
||||
if ( (CONF_radio_addr_table_status[i]) && (TDMA_table_is_fast[i]) && (loc_client_needs[i]>0) && (allocated_slots < 15) ) {
|
||||
TDMA_table_slots[i]++;
|
||||
loc_client_needs[i]--;
|
||||
allocated_slots++;
|
||||
remaining_needs = remaining_needs + loc_client_needs[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
// 5) 2nd allocation pass, round robin of remaining, even without needs
|
||||
while (allocated_slots < 15) {
|
||||
master_allocated_slots++;
|
||||
allocated_slots++;
|
||||
for (i=0; i<radio_addr_table_size; i++) {
|
||||
if ( (CONF_radio_addr_table_status[i]) && (TDMA_table_is_fast[i]) && (allocated_slots < 15) ) {
|
||||
TDMA_table_slots[i]++;
|
||||
allocated_slots++;
|
||||
}
|
||||
}
|
||||
}
|
||||
// 6) timings construction
|
||||
time_max_TX_burst = (CONF_reduced_TDMA_slot_duration + CONF_TDMA_slot_margin) + (master_allocated_slots * CONF_TDMA_slot_duration) + ((master_allocated_slots-1)*CONF_TDMA_slot_margin);// for Master
|
||||
loc_time_offset = time_max_TX_burst + CONF_TDMA_slot_margin + CONF_TR_margain + CONF_TA_margain;
|
||||
//printf("m %i", time_max_TX_burst);
|
||||
for (i=0; i<radio_addr_table_size; i++) {
|
||||
if ( (CONF_radio_addr_table_status[i]) && (TDMA_table_is_fast[i]) ) {
|
||||
local_TA = TDMA_table_TA[i];
|
||||
if ( (local_TA > -2000) && (local_TA < 20000) ) {
|
||||
TDMA_table_offset[i] = (loc_time_offset/10) - (local_TA/100);
|
||||
} else {
|
||||
TDMA_table_offset[i] = (loc_time_offset/10);
|
||||
}
|
||||
loc_time_offset = loc_time_offset + (TDMA_table_slots[i] * (CONF_TDMA_slot_duration + CONF_TDMA_slot_margin) );
|
||||
//printf("client %i %i %i ", i, TDMA_table_offset[i], TDMA_table_slots[i]*CONF_TDMA_slot_duration);
|
||||
}
|
||||
}
|
||||
//printf("\r\n");
|
||||
//multi frame x4
|
||||
TDMA_offset_multi_frame = loc_time_offset / 10;
|
||||
for (i=0; i<4; i++) {
|
||||
if ( (CONF_radio_addr_table_status[i]) && (TDMA_table_is_fast[i]==0) ) {
|
||||
local_TA = TDMA_table_TA[i];
|
||||
if ( (local_TA > -2000) && (local_TA < 20000) ) {
|
||||
TDMA_table_offset[i] = TDMA_offset_multi_frame - (local_TA/100);
|
||||
} else {
|
||||
TDMA_table_offset[i] = TDMA_offset_multi_frame;
|
||||
}
|
||||
}
|
||||
}
|
||||
loc_time_offset = loc_time_offset + CONF_TDMA_slot_duration + CONF_TDMA_slot_margin;
|
||||
TDMA_offset_multi_frame = loc_time_offset / 10;
|
||||
for (i=4; i<radio_addr_table_size; i++) {
|
||||
if ( (CONF_radio_addr_table_status[i]) && (TDMA_table_is_fast[i]==0) ) {
|
||||
local_TA = TDMA_table_TA[i];
|
||||
if ( (local_TA > -2000) && (local_TA < 20000) ) {
|
||||
TDMA_table_offset[i] = TDMA_offset_multi_frame - (local_TA/100);
|
||||
} else {
|
||||
TDMA_table_offset[i] = TDMA_offset_multi_frame;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ** TDMA allocation frame construction **
|
||||
TDMA_alloc_frame_raw[0] = 0xFF; // address = broadcast
|
||||
TDMA_alloc_frame_raw[1] = 0x1F; // protocol = TDMA allocation
|
||||
size_wo_FEC = 2;
|
||||
for (i=0; i<radio_addr_table_size; i++) {
|
||||
if (CONF_radio_addr_table_status[i]) { // client "i" is active
|
||||
if (TDMA_table_is_fast[i]==1) { // inside fast slot
|
||||
//if (1) {
|
||||
TDMA_alloc_frame_raw[size_wo_FEC] = i; // client ID
|
||||
size_wo_FEC++;
|
||||
TDMA_alloc_frame_raw[size_wo_FEC] = TDMA_table_offset[i] & 0xFF; // time offset LSB
|
||||
size_wo_FEC++;
|
||||
TDMA_alloc_frame_raw[size_wo_FEC] = (TDMA_table_offset[i] & 0xFF00)>>8; // time offset MSB
|
||||
size_wo_FEC++;
|
||||
TDMA_alloc_frame_raw[size_wo_FEC] = (TDMA_table_slots[i] & 0xF); // TDMA slot length (4xLSb) and power (MSb)
|
||||
size_wo_FEC++;
|
||||
TDMA_alloc_frame_raw[size_wo_FEC] = 0; // ID multi frame (4xLSb)
|
||||
size_wo_FEC++;
|
||||
} else { // inside slow slot
|
||||
TDMA_alloc_frame_raw[size_wo_FEC] = i; // client ID
|
||||
size_wo_FEC++;
|
||||
TDMA_alloc_frame_raw[size_wo_FEC] = TDMA_table_offset[i] & 0xFF; // time offset LSB
|
||||
size_wo_FEC++;
|
||||
TDMA_alloc_frame_raw[size_wo_FEC] = (TDMA_table_offset[i] & 0xFF00)>>8; // time offset MSB
|
||||
size_wo_FEC++;
|
||||
TDMA_alloc_frame_raw[size_wo_FEC] = 1; // TDMA slot length (4xLSb) and power (MSb)
|
||||
size_wo_FEC++;
|
||||
//TDMA_alloc_frame_raw[size_wo_FEC] = 0x30 + (i & 0x0F); //multi frame period (4xMSb) ID multi frame (4xLSb)
|
||||
TDMA_alloc_frame_raw[size_wo_FEC] = 0x20 + (i & 0x03); //multi frame period (4xMSb) ID multi frame (4xLSb)
|
||||
size_wo_FEC++;
|
||||
}
|
||||
}
|
||||
}
|
||||
//Discovery slot multi frame
|
||||
TDMA_alloc_frame_raw[size_wo_FEC] = 0x7E; // client ID
|
||||
size_wo_FEC++;
|
||||
TDMA_alloc_frame_raw[size_wo_FEC] = TDMA_offset_multi_frame & 0xFF; // time offset LSB
|
||||
size_wo_FEC++;
|
||||
TDMA_alloc_frame_raw[size_wo_FEC] = (TDMA_offset_multi_frame & 0xFF00)>>8; // time offset MSB
|
||||
size_wo_FEC++;
|
||||
TDMA_alloc_frame_raw[size_wo_FEC] = 1; // TDMA slot length (4xLSb) and power (MSb)
|
||||
size_wo_FEC++;
|
||||
//TDMA_alloc_frame_raw[size_wo_FEC] = 0x37; //multi frame period=3 (4xMSb); ID multi frame=7 (4xLSb)
|
||||
TDMA_alloc_frame_raw[size_wo_FEC] = 0x23; //multi frame period=2 (4xMSb); ID multi frame=7 (4xLSb)
|
||||
size_wo_FEC++;
|
||||
//END
|
||||
TDMA_alloc_frame_raw[size_wo_FEC] = 0xFF; // used to detect end of TDMA frame
|
||||
size_wo_FEC++;
|
||||
if (size_wo_FEC < 66) {
|
||||
size_wo_FEC = 66;
|
||||
}
|
||||
size_w_FEC = size_w_FEC_compute (size_wo_FEC);
|
||||
rframe_length = size_w_FEC + 1 - SI4463_offset_size;
|
||||
|
||||
TX_TDMA_intern_data[0] = 0;//timer coarse, useless
|
||||
TX_TDMA_intern_data[1] = rframe_length;
|
||||
|
||||
size_w_FEC = FEC_encode2(TDMA_alloc_frame_raw, TX_TDMA_intern_data+3, size_wo_FEC);
|
||||
}
|
||||
|
||||
void TDMA_master_allocation_slow () {
|
||||
int i;
|
||||
for (i=0; i<radio_addr_table_size; i++) {
|
||||
if ( (CONF_radio_addr_table_status[i]) && (TDMA_table_uplink_usage[i] == 0) ) {
|
||||
TDMA_table_is_fast[i] = 0;
|
||||
}
|
||||
if (CONF_radio_addr_table_status[i] <= 0) {
|
||||
TDMA_table_uplink_st[i] = 0;
|
||||
TDMA_table_uplink_usage [i] = 32;
|
||||
TDMA_table_is_fast[i] = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void TDMA_NULL_frame_init(int size) {
|
||||
unsigned char null_frame[260];
|
||||
int size_wo_FEC, size_w_FEC;
|
||||
unsigned char rframe_length;
|
||||
null_frame[0] = my_radio_client_ID + parity_bit_elab[my_radio_client_ID]; // address = client
|
||||
null_frame[1] = 0x00; // protocol = NULL frame
|
||||
//size_wo_FEC = 70;
|
||||
size_wo_FEC = size;
|
||||
size_w_FEC = size_w_FEC_compute (size_wo_FEC);
|
||||
rframe_length = size_w_FEC + 1 - SI4463_offset_size;
|
||||
//TX_signaling_TDMA->data[0] = 0; // timer, date for later use
|
||||
TX_TDMA_intern_data[0] = 0;
|
||||
//TX_signaling_TDMA->data[1] = rframe_length; // length
|
||||
//TX_signaling_TDMA->WR_point = 3;
|
||||
TX_TDMA_intern_data[1] = rframe_length;
|
||||
//size_w_FEC = FEC_encode(null_frame, TX_signaling_TDMA, size_wo_FEC);
|
||||
size_w_FEC = FEC_encode2(null_frame, TX_TDMA_intern_data+3, size_wo_FEC);//+3: timer, size, tdma
|
||||
//TX_signaling_TDMA->last_ready = TX_signaling_TDMA->WR_point;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void TDMA_slave_alloc_exploitation(unsigned char* unFECdata, int unFECsize) {
|
||||
static unsigned char LUT_multif_mask[8] = {0,1,3,7,15,31};
|
||||
int i;
|
||||
// int j;
|
||||
unsigned char loc_client_ID;
|
||||
unsigned char loc_TDMA_slot_length;
|
||||
unsigned char loc_power;
|
||||
unsigned long int loc_TDMA_offset;
|
||||
i=2; //1st byte: client ID, 2nd byte:protocol
|
||||
loc_client_ID = unFECdata[2];
|
||||
while ( (loc_client_ID != 0xFF) && (i < unFECsize) ) {
|
||||
if (loc_client_ID == my_radio_client_ID) {
|
||||
loc_TDMA_offset = ( unFECdata[i+1] + (unFECdata[i+2]<<8) )*10;
|
||||
offset_time_TX_slave = loc_TDMA_offset;
|
||||
//printf("offset:%i\r\n",loc_TDMA_offset);
|
||||
loc_TDMA_slot_length = 0x0F & unFECdata[i+3];
|
||||
time_max_TX_burst = (loc_TDMA_slot_length * CONF_TDMA_slot_duration) + ( (loc_TDMA_slot_length-1) *CONF_TDMA_slot_margin );
|
||||
my_multiframe_ID = 0x0F & unFECdata[i+4];
|
||||
my_multiframe_mask = (0xF0 & unFECdata[i+4]) >> 4;
|
||||
my_multiframe_mask = LUT_multif_mask[my_multiframe_mask];
|
||||
loc_power = ( 0xF0 & unFECdata[i+3] ) >> 4;
|
||||
//printf("TDMAf:");
|
||||
//for (j=0; j< 5; j++) {
|
||||
// printf(" %02X", unFECdata[i+j]);
|
||||
//}
|
||||
//printf ("\r\n");
|
||||
//printf ("offs:%i length:%i multi_ID:%i multi_period:%i\r\n", offset_time_TX_slave, time_max_TX_burst, my_multiframe_ID, my_multiframe_period);
|
||||
slave_alloc_RX_age = 0;
|
||||
}
|
||||
i=i+5;
|
||||
loc_client_ID = unFECdata[i];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
// This file is part of "NPR70 modem firmware" software
|
||||
// (A GMSK data modem for ham radio 430-440MHz, at several hundreds of kbps)
|
||||
// Copyright (c) 2017-2020 Guillaume F. F4HDK (amateur radio callsign)
|
||||
//
|
||||
// "NPR70 modem firmware" is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// "NPR70 modem firmware" is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with "NPR70 modem firmware". If not, see <http://www.gnu.org/licenses/>
|
||||
|
||||
#ifndef TDMA_F4
|
||||
#define TDMA_F4
|
||||
|
||||
void TDMA_init_all(void);
|
||||
|
||||
unsigned char TDMA_byte_elaboration(unsigned char synchro);
|
||||
|
||||
short int TDMA_TA_measure_single_frame(unsigned int frame_timer, unsigned char TDMA_byte, unsigned char client_ID, int frame_size_loc);
|
||||
|
||||
void TDMA_init_TA(unsigned char client_ID, int TA_input);
|
||||
|
||||
void TDMA_top_measure(void);
|
||||
|
||||
void TDMA_FDD_up_top_measure(void);
|
||||
|
||||
void TDMA_byte_RX_interp (unsigned char TDMA_byte, unsigned char client_ID_byte, unsigned char protocol, unsigned int RX_time);
|
||||
|
||||
void TDMA_slave_timeout (void);
|
||||
|
||||
void TDMA_master_allocation ();
|
||||
|
||||
void TDMA_master_allocation_slow ();
|
||||
|
||||
void TDMA_NULL_frame_init(int size);
|
||||
|
||||
void TDMA_slave_alloc_exploitation(unsigned char* unFECdata, int unFECsize);
|
||||
|
||||
#endif
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
#include "Virt_Chan.h"
|
||||
#include "mbed.h"
|
||||
|
||||
int RTP_gateway (W5500_chip* W5500) {
|
||||
static unsigned char RX_data[1600];
|
||||
|
||||
static unsigned char IP_addr_1[6]={10,151,0,20};
|
||||
static unsigned char eth_peer[8]={0x00,0x13,0x3b,0x73,0x12,0xae};
|
||||
int RX_size=0;
|
||||
int size_UDP;
|
||||
int answer=0;
|
||||
RX_size = W5500_read_received_size(W5500, 2);
|
||||
if (RX_size > 0) {
|
||||
answer = 1;
|
||||
size_UDP = W5500_read_UDP_pckt(W5500, 2, RX_data);
|
||||
|
||||
W5500_write_short(W5500, 0x0006, 0x09, eth_peer, 6);
|
||||
W5500_write_short(W5500, 0x000C, 0x09, IP_addr_1, 4);
|
||||
W5500_write_TX_buffer(W5500, 2, RX_data+8, size_UDP-8, 1);
|
||||
|
||||
|
||||
}
|
||||
return answer;
|
||||
|
||||
}
|
||||
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
#ifndef VIRT_CHAN_F4
|
||||
#define VIRT_CHAN_F4
|
||||
|
||||
#include "mbed.h"
|
||||
#include "W5500.h"
|
||||
|
||||
int RTP_gateway (W5500_chip* W5500);
|
||||
|
||||
#endif
|
||||
+425
@@ -0,0 +1,425 @@
|
||||
// This file is part of "NPR70 modem firmware" software
|
||||
// (A GMSK data modem for ham radio 430-440MHz, at several hundreds of kbps)
|
||||
// Copyright (c) 2017-2020 Guillaume F. F4HDK (amateur radio callsign)
|
||||
//
|
||||
// "NPR70 modem firmware" is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// "NPR70 modem firmware" is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with "NPR70 modem firmware". If not, see <http://www.gnu.org/licenses/>
|
||||
|
||||
#include "W5500.h"
|
||||
#include "mbed.h"
|
||||
#include "global_variables.h"
|
||||
#include "Eth_IPv4.h"
|
||||
|
||||
void W5500_read_long(W5500_chip* SPI_p_loc, unsigned int W5500_addr, unsigned char bloc_addr, unsigned char* RX_data, int RX_size)
|
||||
{
|
||||
unsigned char W5_command[20];
|
||||
unsigned char trash[20];
|
||||
W5_command[0] = W5500_addr / 256;
|
||||
W5_command[1] = W5500_addr & 0xFF;
|
||||
W5_command[2] = (bloc_addr * 0x08);
|
||||
*(SPI_p_loc->cs)=0;
|
||||
RX_data[0]=0;
|
||||
|
||||
SPI_p_loc->spi_port->transfer_2 (W5_command, 3, trash, 3);
|
||||
|
||||
SPI_p_loc->spi_port->transfer_2 (trash, RX_size, RX_data, RX_size);
|
||||
wait_us(1);
|
||||
*(SPI_p_loc->cs)=1;
|
||||
wait_us(2);
|
||||
}
|
||||
|
||||
void W5500_write_long(W5500_chip* SPI_p_loc, unsigned int W5500_addr, unsigned char bloc_addr, unsigned char* TX_data, int TX_size) {
|
||||
unsigned char W5_command[4];
|
||||
static unsigned char trash[1600];
|
||||
|
||||
W5_command[0] = W5500_addr / 256;
|
||||
W5_command[1] = W5500_addr & 0xFF;
|
||||
W5_command[2] = (bloc_addr * 0x08) + 4;
|
||||
SPI_p_loc->cs->write(0);
|
||||
SPI_p_loc->spi_port->transfer_2 (W5_command, 3, trash, 3);
|
||||
//wait_us(10);
|
||||
|
||||
SPI_p_loc->spi_port->transfer_2 (TX_data, TX_size, trash, 0);
|
||||
|
||||
wait_us(1);
|
||||
SPI_p_loc->cs->write(1);
|
||||
wait_us(2);
|
||||
}
|
||||
|
||||
void W5500_read_short(W5500_chip* SPI_p_loc, unsigned int W5500_addr, unsigned char bloc_addr, unsigned char* RX_data_ext, int RX_size) {
|
||||
unsigned char TX_data_loc[20];
|
||||
unsigned char RX_data_loc[20];
|
||||
int i;
|
||||
TX_data_loc[0] = W5500_addr / 256;
|
||||
TX_data_loc[1] = W5500_addr & 0xFF;
|
||||
TX_data_loc[2] = (bloc_addr * 0x08) ;
|
||||
SPI_p_loc->cs->write(0);
|
||||
SPI_p_loc->spi_port->transfer_2 (TX_data_loc, RX_size+3, RX_data_loc, RX_size+3);
|
||||
for (i=0; i < RX_size; i++) {
|
||||
RX_data_ext[i] = RX_data_loc[i+3];
|
||||
}
|
||||
wait_us(1);
|
||||
SPI_p_loc->cs->write(1);
|
||||
wait_us(2);
|
||||
}
|
||||
|
||||
void W5500_write_short(W5500_chip* SPI_p_loc, unsigned int W5500_addr, unsigned char bloc_addr, unsigned char* TX_data_ext, int TX_size) {
|
||||
unsigned char TX_data_loc[10];
|
||||
unsigned char trash[10];
|
||||
int i;
|
||||
TX_data_loc[0] = W5500_addr / 256;
|
||||
TX_data_loc[1] = W5500_addr & 0xFF;
|
||||
TX_data_loc[2] = (bloc_addr * 0x08) + 4;
|
||||
for (i=0; i < TX_size; i++) {
|
||||
TX_data_loc[i+3] = TX_data_ext[i];
|
||||
}
|
||||
SPI_p_loc->cs->write(0);
|
||||
SPI_p_loc->spi_port->transfer_2 (TX_data_loc, TX_size+3, trash, 0);
|
||||
wait_us(1);
|
||||
SPI_p_loc->cs->write(1);
|
||||
wait_us(2);
|
||||
}
|
||||
|
||||
unsigned char W5500_read_byte(W5500_chip* SPI_p_loc, unsigned int W5500_addr, unsigned char bloc_addr) {
|
||||
unsigned char TX_data_loc[20];
|
||||
unsigned char RX_data_loc[20];
|
||||
unsigned char data_out;
|
||||
TX_data_loc[0] = W5500_addr / 256;
|
||||
TX_data_loc[1] = W5500_addr & 0xFF;
|
||||
TX_data_loc[2] = (bloc_addr * 0x08) ;
|
||||
SPI_p_loc->cs->write(0);
|
||||
SPI_p_loc->spi_port->transfer_2 (TX_data_loc, 4, RX_data_loc, 4);
|
||||
wait_us(1);
|
||||
SPI_p_loc->cs->write(1);
|
||||
data_out = RX_data_loc[3];
|
||||
return data_out;
|
||||
wait_us(2);
|
||||
}
|
||||
|
||||
void W5500_write_byte(W5500_chip* SPI_p_loc, unsigned int W5500_addr, unsigned char bloc_addr, unsigned char data) {
|
||||
unsigned char TX_data_loc[10];
|
||||
unsigned char trash[10];
|
||||
TX_data_loc[0] = W5500_addr / 256;
|
||||
TX_data_loc[1] = W5500_addr & 0xFF;
|
||||
TX_data_loc[2] = (bloc_addr * 0x08) + 4;
|
||||
TX_data_loc[3] = data;
|
||||
SPI_p_loc->cs->write(0);
|
||||
SPI_p_loc->spi_port->transfer_2 (TX_data_loc, 4, trash, 0);
|
||||
wait_us(1);
|
||||
SPI_p_loc->cs->write(1);
|
||||
wait_us(2);
|
||||
}
|
||||
|
||||
|
||||
void W5500_Phy_off_2sec(W5500_chip* SPI_p_loc) {
|
||||
//unsigned char phy_config[1];
|
||||
W5500_write_byte(SPI_p_loc, 0x002E, 0x00, 0x70);
|
||||
wait(5);
|
||||
W5500_write_byte(SPI_p_loc, 0x002E, 0x00, 0xF8);
|
||||
}
|
||||
|
||||
int W5500_read_received_size(W5500_chip* SPI_p_loc, int sock_nb) {
|
||||
int size=9999, previous_size=9999;
|
||||
unsigned char data[10];
|
||||
do {
|
||||
previous_size = size;
|
||||
W5500_read_short(SPI_p_loc, 0x0026, (sock_nb*4)+1, data, 2);
|
||||
size = data[1] + data[0]*256;
|
||||
} while (previous_size != size);
|
||||
|
||||
//printf("size:%d\r\n", size);
|
||||
return size;
|
||||
}
|
||||
|
||||
int W5500_read_TX_free_size(W5500_chip* SPI_p_loc, int sock_nb) {
|
||||
int size=9999, previous_size=9999;
|
||||
unsigned char data[10];
|
||||
do {
|
||||
previous_size = size;
|
||||
W5500_read_short(SPI_p_loc, 0x0020, (sock_nb*4)+1, data, 2);
|
||||
size = data[1] + data[0]*256;
|
||||
} while (previous_size != size);
|
||||
|
||||
//printf("size:%d\r\n", size);
|
||||
return size;
|
||||
}
|
||||
|
||||
void W5500_read_RX_buffer(W5500_chip* SPI_p_loc, int sock_nb, unsigned char* data, int size) {
|
||||
unsigned char read_pointer_raw[10];
|
||||
unsigned short read_pointer;
|
||||
W5500_read_short(SPI_p_loc, 0x0028, (sock_nb*4)+1, read_pointer_raw, 2);
|
||||
read_pointer = read_pointer_raw[1] + read_pointer_raw[0] * 256;
|
||||
W5500_read_long(SPI_p_loc, read_pointer, (sock_nb*4)+3, data, size);
|
||||
read_pointer = read_pointer + size ;
|
||||
read_pointer_raw[0] = read_pointer / 256;
|
||||
read_pointer_raw[1] = read_pointer & 0xFF;
|
||||
W5500_write_short(SPI_p_loc, 0x0028, (sock_nb*4)+1, read_pointer_raw, 2);
|
||||
W5500_write_byte(SPI_p_loc, 0x0001, (sock_nb*4)+1, 0x40);
|
||||
}
|
||||
|
||||
int W5500_read_UDP_pckt (W5500_chip* SPI_p_loc, int sock_nb, unsigned char* data) {
|
||||
int size=0;
|
||||
unsigned char read_pointer_raw[10];
|
||||
unsigned char trash[20];
|
||||
unsigned short read_pointer;
|
||||
unsigned char W5_command[20];
|
||||
W5500_read_short(SPI_p_loc, 0x0028, (sock_nb*4)+1, read_pointer_raw, 2);
|
||||
read_pointer = read_pointer_raw[1] + read_pointer_raw[0] * 256;
|
||||
// read first 8 bytes
|
||||
W5_command[0] = read_pointer_raw[0];
|
||||
W5_command[1] = read_pointer_raw[1];
|
||||
W5_command[2] = ((sock_nb*4)+3) * 0x08;
|
||||
SPI_p_loc->cs->write(0);
|
||||
SPI_p_loc->spi_port->transfer_2 (W5_command, 3, trash, 3);
|
||||
SPI_p_loc->spi_port->transfer_2 (trash, 8, data, 8);
|
||||
size = data [7] + 256 * data[6];
|
||||
SPI_p_loc->spi_port->transfer_2 (trash, size, data+8, size);
|
||||
|
||||
size = size + 8;
|
||||
wait_us(1);
|
||||
SPI_p_loc->cs->write(1);
|
||||
wait_us(2);
|
||||
//printf ("size UDP:%d\r\n", size);
|
||||
read_pointer = read_pointer + size ;
|
||||
|
||||
read_pointer_raw[0] = read_pointer / 256;
|
||||
read_pointer_raw[1] = read_pointer & 0xFF;
|
||||
W5500_write_short(SPI_p_loc, 0x0028, (sock_nb*4)+1, read_pointer_raw, 2);
|
||||
W5500_write_byte(SPI_p_loc, 0x0001, (sock_nb*4)+1, 0x40);//command receive
|
||||
return size;
|
||||
}
|
||||
|
||||
int W5500_read_MAC_pckt (W5500_chip* SPI_p_loc, int sock_nb, unsigned char* data) {
|
||||
int size=0;
|
||||
unsigned char read_pointer_raw[10];
|
||||
unsigned char trash[20];
|
||||
unsigned short read_pointer;
|
||||
unsigned char W5_command[20];
|
||||
W5500_read_short(SPI_p_loc, 0x0028, (sock_nb*4)+1, read_pointer_raw, 2);
|
||||
read_pointer = read_pointer_raw[1] + read_pointer_raw[0] * 256;
|
||||
// read first 8 bytes
|
||||
W5_command[0] = read_pointer_raw[0];
|
||||
W5_command[1] = read_pointer_raw[1];
|
||||
W5_command[2] = ((sock_nb*4)+3) * 0x08;
|
||||
SPI_p_loc->cs->write(0);
|
||||
SPI_p_loc->spi_port->transfer_2 (W5_command, 3, trash, 3);
|
||||
SPI_p_loc->spi_port->transfer_2 (trash, 2, data, 2);
|
||||
size = data [1] + 256 * data[0];
|
||||
SPI_p_loc->spi_port->transfer_2 (trash, size-2, data+2, size-2);
|
||||
|
||||
wait_us(1);
|
||||
SPI_p_loc->cs->write(1);
|
||||
wait_us(2);
|
||||
//printf ("size UDP:%d\r\n", size);
|
||||
read_pointer = read_pointer + size ;
|
||||
|
||||
read_pointer_raw[0] = read_pointer / 256;
|
||||
read_pointer_raw[1] = read_pointer & 0xFF;
|
||||
W5500_write_short(SPI_p_loc, 0x0028, (sock_nb*4)+1, read_pointer_raw, 2);
|
||||
W5500_write_byte(SPI_p_loc, 0x0001, (sock_nb*4)+1, 0x40);
|
||||
return size;
|
||||
}
|
||||
|
||||
void W5500_write_TX_buffer(W5500_chip* SPI_p_loc, int sock_nb, unsigned char* data, int size, int send_mac) {
|
||||
unsigned char write_pointer_raw[10];
|
||||
unsigned short write_pointer;
|
||||
W5500_read_short(SPI_p_loc, 0x0024, (sock_nb*4)+1, write_pointer_raw, 2);
|
||||
write_pointer = write_pointer_raw[1] + write_pointer_raw[0] * 256;
|
||||
W5500_write_long(SPI_p_loc, write_pointer, (sock_nb*4)+2, data, size);
|
||||
write_pointer = write_pointer + size ;
|
||||
write_pointer_raw[0] = write_pointer / 256;
|
||||
write_pointer_raw[1] = write_pointer & 0xFF;
|
||||
W5500_write_short(SPI_p_loc, 0x0024, (sock_nb*4)+1, write_pointer_raw, 2);
|
||||
if (send_mac == 1) {
|
||||
W5500_write_byte(SPI_p_loc, 0x0001, (sock_nb*4)+1, 0x21);
|
||||
} else {
|
||||
W5500_write_byte(SPI_p_loc, 0x0001, (sock_nb*4)+1, 0x20);
|
||||
}
|
||||
}
|
||||
|
||||
static int W5500_configured = 0; // 0 not yet configured
|
||||
// 1 configured
|
||||
// 2 waiting reconfigure
|
||||
// 3 waiting reboot after reconfigure
|
||||
void W5500_re_configure (void) {
|
||||
W5500_configured = 2;
|
||||
|
||||
}
|
||||
|
||||
void W5500_re_configure_gateway(W5500_chip* SPI_p_loc) {
|
||||
unsigned char data[10];
|
||||
if ( (LAN_conf_applied.LAN_def_route_activ) && (is_telnet_routed) && (is_TDMA_master) ) {
|
||||
IP_int2char (LAN_conf_applied.LAN_def_route, data);
|
||||
W5500_write_long(SPI_p_loc, 0x0001, 0x00, data, 4); // gateway
|
||||
} else {
|
||||
IP_int2char (0x01010101, data);
|
||||
W5500_write_long(SPI_p_loc, 0x0001, 0x00, data, 4);
|
||||
}
|
||||
}
|
||||
|
||||
void W5500_re_configure_periodic_call(W5500_chip* SPI_p_loc) {
|
||||
unsigned char data[10];
|
||||
if (W5500_configured == 4) { // reboot
|
||||
//W5500_write_byte(SPI_p_loc, 0x002E, 0x00, 0xF8);//!!! 0xC8 0xF8
|
||||
W5500_write_byte(SPI_p_loc, 0x002E, 0x00, (CONF_Eth_mode << 3) + 0xC0);//!!! 0xC8 0xF8
|
||||
W5500_configured = 1; //configured
|
||||
}
|
||||
if (W5500_configured == 3) { //wait
|
||||
W5500_configured = 4;
|
||||
}
|
||||
if (W5500_configured == 2) { //reconfigure
|
||||
IP_int2char (LAN_conf_applied.LAN_modem_IP, data);
|
||||
W5500_write_long(SPI_p_loc, 0x000F, 0x00, data, 4); // modem IP
|
||||
IP_int2char (LAN_conf_applied.LAN_subnet_mask, data);
|
||||
W5500_write_long(SPI_p_loc, 0x0005, 0x00, data, 4); // net mask
|
||||
|
||||
if ( (LAN_conf_applied.LAN_def_route_activ) && (is_telnet_routed) && (is_TDMA_master) ) {
|
||||
IP_int2char (LAN_conf_applied.LAN_def_route, data);
|
||||
W5500_write_long(SPI_p_loc, 0x0001, 0x00, data, 4); // gateway
|
||||
} else {
|
||||
IP_int2char (0x01010101, data);
|
||||
W5500_write_long(SPI_p_loc, 0x0001, 0x00, data, 4);
|
||||
}
|
||||
//W5500_write_byte(SPI_p_loc, 0x002E, 0x00, 0x78); // 0x48 0x78
|
||||
W5500_write_byte(SPI_p_loc, 0x002E, 0x00, (CONF_Eth_mode << 3) + 0x40); // 0x48 0x78
|
||||
W5500_configured = 3; //waiting reboot
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void W5500_initial_configure(W5500_chip* SPI_p_loc) {
|
||||
// reset
|
||||
W5500_write_byte(SPI_p_loc, 0x0000, 0x00, 0x80);//0x90
|
||||
wait_ms(500);
|
||||
W5500_write_byte(SPI_p_loc, 0x0000, 0x00, 0x00);//0x10
|
||||
//wait_ms(1600);
|
||||
//W5500_write_byte(SPI_p_loc, 0x002E, 0x00, 0xC8);
|
||||
//W5500_write_byte(SPI_p_loc, 0x002E, 0x00, 0x78);//48 78 for 10MB full duplex / 40 half duplex !!!
|
||||
W5500_write_byte(SPI_p_loc, 0x002E, 0x00, (CONF_Eth_mode << 3) + 0x40);//48 78 for 10MB full duplex / 40 half duplex !!!
|
||||
wait_ms(1600);
|
||||
//W5500_write_byte(SPI_p_loc, 0x002E, 0x00, 0xF8);//c8 F8 for 10MB full duplex / c0 half duplexc8 !!!
|
||||
W5500_write_byte(SPI_p_loc, 0x002E, 0x00, (CONF_Eth_mode << 3) + 0xC0);//c8 F8 for 10MB full duplex / c0 half duplexc8 !!!
|
||||
//W5500_write_byte(SPI_p_loc, 0x002E, 0x00, 0xC8);
|
||||
//wait_ms(1600);
|
||||
|
||||
//W5500_write_byte(SPI_p_loc, 0x002E, 0x00, 0xC0);
|
||||
|
||||
//IP & MAC config
|
||||
//unsigned char data[20]={0x00,0x2E,0x00,4,5,6, 10,151,20,254};
|
||||
//unsigned char data[20]={0x00,0x2E,0x00,4,5,6, 192,168,0,254};
|
||||
unsigned char data[20]={0x00,0x2E,0x00,4,5,6};
|
||||
//W5500_write_long(SPI_p_loc, 0x0009, 0x00, data, 6); // modem MAC
|
||||
//W5500_write_long(SPI_p_loc, 0x0009, 0x00, LAN_conf_applied.modem_MAC, 6); // modem MAC
|
||||
W5500_write_long(SPI_p_loc, 0x0009, 0x00, CONF_modem_MAC, 6); // modem MAC
|
||||
IP_int2char (LAN_conf_applied.LAN_modem_IP, data);
|
||||
W5500_write_long(SPI_p_loc, 0x000F, 0x00, data, 4); // modem IP
|
||||
if ( (is_telnet_routed) && (is_TDMA_master) ) {
|
||||
IP_int2char (LAN_conf_applied.LAN_def_route, data);
|
||||
W5500_write_long(SPI_p_loc, 0x0001, 0x00, data, 4); // gateway
|
||||
} else {
|
||||
IP_int2char (0, data);
|
||||
W5500_write_long(SPI_p_loc, 0x0001, 0x00, data, 4);
|
||||
}
|
||||
IP_int2char (LAN_conf_applied.LAN_subnet_mask, data);
|
||||
W5500_write_long(SPI_p_loc, 0x0005, 0x00, data, 4); // net mask
|
||||
|
||||
W5500_write_byte(SPI_p_loc, 0x0018, 0x00, 0x01);//sock interrupt mask
|
||||
|
||||
// Socket Read buffer size
|
||||
W5500_write_byte(SPI_p_loc, 0x001E, 0x01, 0x08); //0 macraw 08
|
||||
W5500_write_byte(SPI_p_loc, 0x001E, 0x05, 0x02); //1 telnet 02
|
||||
W5500_write_byte(SPI_p_loc, 0x001E, 0x09, 0x04); //2 RTP 04
|
||||
W5500_write_byte(SPI_p_loc, 0x001E, 0x0D, 0x02); //3 DHCP 02
|
||||
W5500_write_byte(SPI_p_loc, 0x001E, 0x11, 0x00); //4
|
||||
W5500_write_byte(SPI_p_loc, 0x001E, 0x15, 0x00); //5
|
||||
W5500_write_byte(SPI_p_loc, 0x001E, 0x19, 0x00); //6
|
||||
W5500_write_byte(SPI_p_loc, 0x001E, 0x1D, 0x00); //7
|
||||
|
||||
// Socket Write buffer size
|
||||
W5500_write_byte(SPI_p_loc, 0x001F, 0x01, 0x04); //0 macraw
|
||||
W5500_write_byte(SPI_p_loc, 0x001F, 0x05, 0x02); //1 telnet
|
||||
W5500_write_byte(SPI_p_loc, 0x001F, 0x09, 0x04); //2 RTP
|
||||
W5500_write_byte(SPI_p_loc, 0x001F, 0x0D, 0x02); //3 DHCP
|
||||
W5500_write_byte(SPI_p_loc, 0x001F, 0x11, 0x02); //4 UDP_FDD
|
||||
W5500_write_byte(SPI_p_loc, 0x001F, 0x15, 0x00); //5
|
||||
W5500_write_byte(SPI_p_loc, 0x001F, 0x19, 0x00); //6
|
||||
W5500_write_byte(SPI_p_loc, 0x001F, 0x1D, 0x00); //7
|
||||
|
||||
// Socket 0 MAC RAW for packet switching
|
||||
W5500_write_byte(SPI_p_loc, 0x0000, 0x01, 0x34); //config B4 for classic
|
||||
W5500_write_byte(SPI_p_loc, 0x002C, 0x01, 0x04); //Interrupt mask : RECV
|
||||
wait_ms(10);
|
||||
W5500_write_byte(SPI_p_loc, 0x0001, 0x01, 0x01); //open
|
||||
|
||||
// Socket 1 telnet
|
||||
W5500_write_byte(SPI_p_loc, 0x0000, 0x05, 0x01); //config
|
||||
wait_ms(10);
|
||||
data[0]=0x00; //port 0d23
|
||||
data[1]=0x17;
|
||||
W5500_write_short(SPI_p_loc, 0x0004, 0x05, data, 2); //port 23 (0x17)
|
||||
//W5500_write_byte(SPI_p_loc, 0x002C, 0x05, 0x00); //interrupt mask
|
||||
|
||||
// Socket 2 RTP port 1519
|
||||
W5500_write_byte(SPI_p_loc, 0x0000, 0x09, 0x42); //config
|
||||
wait_ms(10);
|
||||
data[0]=0x05; //port 0d1519
|
||||
data[1]=0xEF;
|
||||
W5500_write_short(SPI_p_loc, 0x0004, 0x09, data, 2); //port rx 1519
|
||||
data[0]=0x05; //port 0d1516
|
||||
data[1]=0xEC;
|
||||
W5500_write_short(SPI_p_loc, 0x0010, 0x09, data, 2); //port tx 1516
|
||||
W5500_write_byte(SPI_p_loc, 0x0001, 0x09, 0x01); // open
|
||||
data[0]=10;
|
||||
data[1]=151;
|
||||
data[2]=0;
|
||||
data[3]=60;
|
||||
W5500_write_short(SPI_p_loc, 0x000C, 0x09, data, 4); //IP destination 10.151.0.21
|
||||
|
||||
// Socket 3 DHCP server
|
||||
W5500_write_byte(SPI_p_loc, 0x0000, 0x0D, 0x02); //config
|
||||
wait_ms(10);
|
||||
data[0]=0x00; //port 0d67
|
||||
data[1]=0x43;
|
||||
W5500_write_short(SPI_p_loc, 0x0004, 0x0D, data, 2); //port rx 67
|
||||
data[0]=0x00; //port 0d68
|
||||
data[1]=0x44;
|
||||
W5500_write_short(SPI_p_loc, 0x0010, 0x0D, data, 2); //port tx 68
|
||||
W5500_write_byte(SPI_p_loc, 0x0001, 0x0D, 0x01); // open
|
||||
data[0]=255;
|
||||
data[1]=255;
|
||||
data[2]=255;
|
||||
data[3]=255;
|
||||
data[4]=255;
|
||||
data[5]=255;
|
||||
W5500_write_short(SPI_p_loc, 0x000C, 0x0D, data, 4); //IP destination 255.255.255.255
|
||||
W5500_write_short(SPI_p_loc, 0x0006, 0x0D, data, 6);
|
||||
|
||||
// Socket 4 UDP_FDD
|
||||
W5500_write_byte(SPI_p_loc, 0x0000, 0x11, 0x42); //config
|
||||
wait_ms(10);
|
||||
data[0]=0x1A; //port TX 0d6716 = 0x1A3E
|
||||
data[1]=0x3E;
|
||||
W5500_write_short(SPI_p_loc, 0x0004, 0x11, data, 2);
|
||||
data[0]=0x1A; //port RX 0d6718 = 0x1A3C
|
||||
data[1]=0x3C;
|
||||
W5500_write_short(SPI_p_loc, 0x0010, 0x11, data, 2);
|
||||
W5500_write_byte(SPI_p_loc, 0x0001, 0x11, 0x01); // open
|
||||
IP_int2char (CONF_master_down_IP, data);
|
||||
W5500_write_short(SPI_p_loc, 0x000C, 0x11, data, 4);
|
||||
// Socket 5
|
||||
|
||||
// Socket 6
|
||||
|
||||
// Socket 7
|
||||
W5500_configured = 1;
|
||||
}
|
||||
+66
@@ -0,0 +1,66 @@
|
||||
// This file is part of "NPR70 modem firmware" software
|
||||
// (A GMSK data modem for ham radio 430-440MHz, at several hundreds of kbps)
|
||||
// Copyright (c) 2017-2020 Guillaume F. F4HDK (amateur radio callsign)
|
||||
//
|
||||
// "NPR70 modem firmware" is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// "NPR70 modem firmware" is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with "NPR70 modem firmware". If not, see <http://www.gnu.org/licenses/>
|
||||
|
||||
#ifndef W5500_F4
|
||||
#define W5500_F4
|
||||
|
||||
#include "mbed.h"
|
||||
|
||||
struct W5500_chip{
|
||||
SPI* spi_port;
|
||||
DigitalOut* cs;
|
||||
DigitalIn* interrupt;
|
||||
unsigned char sock_interrupt;
|
||||
};
|
||||
|
||||
void W5500_read_long(W5500_chip* SPI_p_loc, unsigned int W5500_addr, unsigned char bloc_addr, unsigned char* RX_data, int RX_size);
|
||||
|
||||
void W5500_write_long(W5500_chip* SPI_p_loc, unsigned int W5500_addr, unsigned char bloc_addr, unsigned char* TX_data, int TX_size);
|
||||
|
||||
void W5500_read_short(W5500_chip* SPI_p_loc, unsigned int W5500_addr, unsigned char bloc_addr, unsigned char* RX_data_ext, int RX_size);
|
||||
|
||||
void W5500_read_char(W5500_chip* SPI_p_loc, unsigned int W5500_addr, unsigned char bloc_addr, char* RX_data_ext, int RX_size);
|
||||
|
||||
void W5500_write_short(W5500_chip* SPI_p_loc, unsigned int W5500_addr, unsigned char bloc_addr, unsigned char* TX_data_ext, int TX_size);
|
||||
|
||||
unsigned char W5500_read_byte(W5500_chip* SPI_p_loc, unsigned int W5500_addr, unsigned char bloc_addr);
|
||||
|
||||
void W5500_write_byte(W5500_chip* SPI_p_loc, unsigned int W5500_addr, unsigned char bloc_addr, unsigned char data);
|
||||
|
||||
void W5500_Phy_off_2sec(W5500_chip* SPI_p_loc);
|
||||
|
||||
int W5500_read_received_size(W5500_chip* SPI_p_loc, int sock_nb);
|
||||
|
||||
int W5500_read_TX_free_size(W5500_chip* SPI_p_loc, int sock_nb);
|
||||
|
||||
void W5500_read_RX_buffer(W5500_chip* SPI_p_loc, int sock_nb, unsigned char* data, int size);
|
||||
|
||||
int W5500_read_UDP_pckt (W5500_chip* SPI_p_loc, int sock_nb, unsigned char* data);
|
||||
|
||||
int W5500_read_MAC_pckt (W5500_chip* SPI_p_loc, int sock_nb, unsigned char* data);
|
||||
|
||||
void W5500_write_TX_buffer(W5500_chip* SPI_p_loc, int sock_nb, unsigned char* data, int size, int send_mac);
|
||||
|
||||
void W5500_re_configure (void);
|
||||
|
||||
void W5500_re_configure_gateway(W5500_chip* SPI_p_loc);
|
||||
|
||||
void W5500_re_configure_periodic_call(W5500_chip* SPI_p_loc);
|
||||
|
||||
void W5500_initial_configure(W5500_chip* SPI_p_loc);
|
||||
|
||||
#endif
|
||||
+274
@@ -0,0 +1,274 @@
|
||||
// This file is part of "NPR70 modem firmware" software
|
||||
// (A GMSK data modem for ham radio 430-440MHz, at several hundreds of kbps)
|
||||
// Copyright (c) 2017-2020 Guillaume F. F4HDK (amateur radio callsign)
|
||||
//
|
||||
// "NPR70 modem firmware" is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// "NPR70 modem firmware" is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with "NPR70 modem firmware". If not, see <http://www.gnu.org/licenses/>
|
||||
|
||||
#include "config_flash.h"
|
||||
#include "mbed.h"
|
||||
#include "global_variables.h"
|
||||
#include "Eth_IPv4.h"
|
||||
#include "HMI_telnet.h"
|
||||
#include "TDMA.h"
|
||||
|
||||
static unsigned char raw_config_data[260];
|
||||
static unsigned int config_index;
|
||||
|
||||
unsigned int virt_EEPROM_read(unsigned char* out_data) { //reads 256 Bytes of virtual eeprom data
|
||||
FlashIAP my_loc_flash;
|
||||
unsigned char loc_index_char[6];
|
||||
unsigned int loc_index_int, highest_index_seen;
|
||||
unsigned int loc_address;
|
||||
int i;
|
||||
my_loc_flash.init();
|
||||
highest_index_seen = 0;
|
||||
//for (i=0; i<256; i++) {
|
||||
for (i=0; i<64; i++) {
|
||||
my_loc_flash.read(loc_index_char, NFPR_config_addr_begin+(i*256), 4);
|
||||
loc_index_int = (loc_index_char[0] << 24) + (loc_index_char[1] << 16) + (loc_index_char[2] << 8) + loc_index_char[3];
|
||||
if ( (loc_index_int != 0xFFFFFFFF) && (loc_index_int > highest_index_seen) ) {
|
||||
highest_index_seen = loc_index_int;
|
||||
}
|
||||
}
|
||||
if (highest_index_seen != 0) { //valid entry found
|
||||
//loc_address = NFPR_config_addr_begin + (highest_index_seen & 0xFF)*256;
|
||||
loc_address = NFPR_config_addr_begin + (highest_index_seen & 0x3F)*256;
|
||||
my_loc_flash.read(out_data, loc_address, 256);
|
||||
}
|
||||
my_loc_flash.deinit();
|
||||
return highest_index_seen;
|
||||
}
|
||||
|
||||
unsigned int virt_EEPROM_write(unsigned char* in_data, unsigned int previous_index) {
|
||||
unsigned int new_index;
|
||||
unsigned int loc_address;
|
||||
FlashIAP my_loc_flash;
|
||||
if (previous_index == 0) {
|
||||
previous_index = 0xFF; //next index will be 0x100, errase first sector
|
||||
}
|
||||
new_index = previous_index + 1;
|
||||
//loc_address = NFPR_config_addr_begin + (new_index & 0xFF)*256; //previous config 64kB
|
||||
loc_address = NFPR_config_addr_begin + (new_index & 0x3F)*256; //previous config
|
||||
my_loc_flash.init();
|
||||
if ((new_index & 7) == 0) { //new sector, errase sector
|
||||
HMI_printf ("errase sector:%X\r\n", loc_address);
|
||||
my_loc_flash.erase(loc_address, 2048);
|
||||
}
|
||||
// writes new index
|
||||
in_data[0] = (new_index & 0xFF000000) >> 24;
|
||||
in_data[1] = (new_index & 0xFF0000) >> 16;
|
||||
in_data[2] = (new_index & 0xFF00) >> 8;
|
||||
in_data[3] = new_index & 0xFF;
|
||||
my_loc_flash.program(in_data, loc_address, 256);
|
||||
HMI_printf("write success\r\n");
|
||||
my_loc_flash.deinit();
|
||||
return new_index;
|
||||
}
|
||||
|
||||
//void virt_EEPROM_debug_read(void) {
|
||||
// int i;
|
||||
// unsigned int loc_address;
|
||||
// unsigned char loc_data[260];
|
||||
// FlashIAP my_loc_flash;
|
||||
// my_loc_flash.init();
|
||||
// //for (i=0; i<256; i++) {
|
||||
// for (i=0; i<64; i++) {
|
||||
// //loc_address = NFPR_config_addr_begin + (i & 0xFF)*256;
|
||||
// loc_address = NFPR_config_addr_begin + (i & 0x3F)*256;
|
||||
// my_loc_flash.read(loc_data, loc_address, 256);
|
||||
// HMI_printf("addr:%X data:%02X %02X %02X %02X %02X %02X %02X %02X\r\n", loc_address, loc_data[0], loc_data[1], loc_data[2], loc_data[3], loc_data[4], loc_data[5], loc_data[6], loc_data[7]);
|
||||
// wait_ms(10);
|
||||
// }
|
||||
// my_loc_flash.deinit();
|
||||
//}
|
||||
|
||||
void virt_EEPROM_errase_all(void) {
|
||||
FlashIAP my_loc_flash;
|
||||
my_loc_flash.init();
|
||||
//my_loc_flash.erase(NFPR_config_addr_begin, 0x10000); //previous config 64kB
|
||||
my_loc_flash.erase(NFPR_config_addr_begin, 0x4000); //config 16kB
|
||||
my_loc_flash.deinit();
|
||||
}
|
||||
|
||||
// higher level functions
|
||||
|
||||
void NFPR_config_read(AnalogIn* analog_pin) {
|
||||
int i;
|
||||
unsigned char default_config[260] = NFPR_default_config;
|
||||
config_index = virt_EEPROM_read(raw_config_data);
|
||||
if (config_index == 0) { //no previous config found
|
||||
for (i=0; i<256; i++) {
|
||||
raw_config_data[i] = default_config[i];
|
||||
}
|
||||
//MAC random 2 LSB values
|
||||
raw_config_data[58] = NFPR_random_generator(analog_pin);
|
||||
raw_config_data[59] = NFPR_random_generator(analog_pin);
|
||||
raw_config_data[5] = raw_config_data[58];//callsign 1st char
|
||||
raw_config_data[6] = raw_config_data[59];//callsign 2nd char
|
||||
config_index = virt_EEPROM_write (raw_config_data, config_index);//save the MAC
|
||||
}
|
||||
apply_config_from_raw_string(raw_config_data);
|
||||
if (is_TDMA_master == 1) {
|
||||
my_client_radio_connexion_state = 2;
|
||||
} else {
|
||||
my_client_radio_connexion_state = 1;
|
||||
my_radio_client_ID = 0x7E;
|
||||
}
|
||||
}
|
||||
|
||||
unsigned char NFPR_random_generator(AnalogIn* analog_pin) {
|
||||
unsigned short interm_random;
|
||||
unsigned char random_8;
|
||||
//int i, j;
|
||||
int i;
|
||||
random_8 = 0;
|
||||
for (i=0; i<8; i++) {
|
||||
interm_random = analog_pin->read_u16();
|
||||
interm_random = (interm_random & 0x10)>>4;
|
||||
interm_random = (interm_random << i);
|
||||
random_8 = random_8 + interm_random;
|
||||
wait_ms(4);
|
||||
}
|
||||
return random_8;
|
||||
}
|
||||
|
||||
unsigned int NFPR_config_save(void) {
|
||||
if ( (CONF_radio_my_callsign[0] == 0) || (CONF_radio_my_callsign[2] == 0) ) {
|
||||
HMI_printf("ERROR : not yet configured\r\n");
|
||||
|
||||
} else {
|
||||
write_config_to_raw_string(raw_config_data);
|
||||
config_index = virt_EEPROM_write (raw_config_data, config_index);
|
||||
}
|
||||
return config_index;
|
||||
}
|
||||
|
||||
void apply_config_from_raw_string(unsigned char* data_r) {
|
||||
int i;
|
||||
unsigned char modul_temp;
|
||||
is_TDMA_master = data_r[4];
|
||||
for (i=0; i<16; i++) {
|
||||
CONF_radio_my_callsign[i] = data_r[5+i];
|
||||
}
|
||||
CONF_radio_my_callsign[15] = 0;
|
||||
is_telnet_active = data_r[21];
|
||||
modul_temp = (data_r[22] & 0x3F);
|
||||
if ( ((modul_temp>=11)&&(modul_temp<=14)) || ((modul_temp>=20)&&(modul_temp<=24)) ) {
|
||||
CONF_radio_modulation = modul_temp;
|
||||
} else {
|
||||
CONF_radio_modulation = 24;
|
||||
}
|
||||
CONF_frequency_band = (data_r[22] & 0xC0) >> 6;
|
||||
//printf("freq_band:%X modul:%i\r\n", CONF_frequency_band, modul_temp);
|
||||
CONF_radio_frequency = data_r[23];
|
||||
CONF_radio_network_ID = data_r[24];
|
||||
|
||||
//specific for clients
|
||||
CONF_radio_static_IP_requested = data_r[25];
|
||||
CONF_radio_IP_size_requested = IP_char2int(data_r+26);
|
||||
LAN_conf_saved.DHCP_server_active = data_r[30];
|
||||
LAN_conf_applied.DHCP_server_active = data_r[30];
|
||||
|
||||
//specific for master
|
||||
LAN_conf_saved.LAN_modem_IP = IP_char2int(data_r+31);
|
||||
LAN_conf_applied.LAN_modem_IP = IP_char2int(data_r+31);
|
||||
LAN_conf_saved.LAN_subnet_mask = IP_char2int(data_r+35);
|
||||
LAN_conf_applied.LAN_subnet_mask = IP_char2int(data_r+35);
|
||||
CONF_radio_IP_size = IP_char2int(data_r+39);
|
||||
LAN_conf_saved.LAN_DNS_activ = data_r[43];
|
||||
LAN_conf_applied.LAN_DNS_activ = data_r[43];
|
||||
LAN_conf_saved.LAN_DNS_value = IP_char2int(data_r+44);
|
||||
LAN_conf_applied.LAN_DNS_value = IP_char2int(data_r+44);
|
||||
LAN_conf_saved.LAN_def_route_activ = data_r[48];
|
||||
LAN_conf_applied.LAN_def_route_activ = data_r[48];
|
||||
LAN_conf_saved.LAN_def_route = IP_char2int(data_r+49);
|
||||
LAN_conf_applied.LAN_def_route = IP_char2int(data_r+49);
|
||||
CONF_radio_IP_start = IP_char2int(data_r+53);
|
||||
is_telnet_routed = data_r[57];
|
||||
CONF_modem_MAC[0] = 0x4E;//N
|
||||
CONF_modem_MAC[1] = 0x46;//F
|
||||
CONF_modem_MAC[2] = 0x50;//P
|
||||
CONF_modem_MAC[3] = 0x52;//R
|
||||
CONF_modem_MAC[4] = data_r[58];
|
||||
CONF_modem_MAC[5] = data_r[59];
|
||||
CONF_radio_default_state_ON_OFF = data_r[60];
|
||||
CONF_radio_PA_PWR = data_r[61];
|
||||
|
||||
CONF_frequency_HD = ((data_r[64]) <<8 ) | data_r[65];
|
||||
if ( (CONF_frequency_HD == 0x0000) || (CONF_frequency_HD > FREQ_MAX_RAW) ) {
|
||||
CONF_frequency_HD = CONF_DEF_FREQ; // force to default frequency
|
||||
}
|
||||
CONF_freq_shift = ((data_r[66]) <<8) | data_r[67];
|
||||
CONF_transmission_method = data_r[68];
|
||||
CONF_master_FDD = data_r[69];
|
||||
CONF_master_down_IP = IP_char2int(data_r+70);
|
||||
if ((data_r[74] >= 0xF0) && (data_r[74] <= 0xF7)){
|
||||
CONF_Eth_mode = data_r[74] - 0xF0;
|
||||
}
|
||||
else {
|
||||
CONF_Eth_mode = 0x07;
|
||||
}
|
||||
if (LAN_conf_applied.DHCP_server_active == 1) {
|
||||
LAN_conf_applied.DHCP_range_start = CONF_radio_IP_start;
|
||||
LAN_conf_applied.DHCP_range_size = CONF_radio_IP_size_requested;
|
||||
|
||||
}
|
||||
if ( (is_TDMA_master == 1) && (CONF_master_FDD == 1) ) { // FDD Master down
|
||||
G_FDD_trig_pin->output();
|
||||
}
|
||||
if ( (is_TDMA_master == 1) && (CONF_master_FDD == 2) ) {// FDD master up
|
||||
G_FDD_trig_IRQ->rise(&TDMA_FDD_up_top_measure);
|
||||
}
|
||||
}
|
||||
|
||||
void write_config_to_raw_string (unsigned char* data_r) {
|
||||
int i;
|
||||
data_r[4] = is_TDMA_master;
|
||||
for (i=0; i<16; i++) {
|
||||
data_r[5+i] = CONF_radio_my_callsign[i];
|
||||
}
|
||||
data_r[21] = is_telnet_active;
|
||||
data_r[22] = ( (CONF_frequency_band << 6) & 0xC0) + (CONF_radio_modulation & 0x3F);
|
||||
data_r[23] = CONF_radio_frequency;
|
||||
data_r[24] = CONF_radio_network_ID;
|
||||
|
||||
//specific for clients
|
||||
data_r[25] = CONF_radio_static_IP_requested;
|
||||
IP_int2char(CONF_radio_IP_size_requested, data_r+26);
|
||||
data_r[30] = LAN_conf_saved.DHCP_server_active;
|
||||
|
||||
//specific for master
|
||||
IP_int2char(LAN_conf_saved.LAN_modem_IP, data_r+31);
|
||||
IP_int2char(LAN_conf_saved.LAN_subnet_mask, data_r+35);
|
||||
IP_int2char(CONF_radio_IP_size, data_r+39);
|
||||
data_r[43] = LAN_conf_saved.LAN_DNS_activ;
|
||||
IP_int2char(LAN_conf_saved.LAN_DNS_value, data_r+44);
|
||||
data_r[48] = LAN_conf_saved.LAN_def_route_activ;
|
||||
IP_int2char(LAN_conf_saved.LAN_def_route, data_r+49);
|
||||
IP_int2char(CONF_radio_IP_start, data_r+53);
|
||||
data_r[57] = is_telnet_routed;
|
||||
data_r[58] = CONF_modem_MAC[4];
|
||||
data_r[59] = CONF_modem_MAC[5];
|
||||
data_r[60] = CONF_radio_default_state_ON_OFF;
|
||||
data_r[61] = CONF_radio_PA_PWR;
|
||||
|
||||
data_r[64] = (CONF_frequency_HD & 0xFF00)>>8;
|
||||
data_r[65] = (CONF_frequency_HD & 0x00FF);
|
||||
data_r[66] = (CONF_freq_shift & 0xFF00)>>8;
|
||||
data_r[67] = (CONF_freq_shift & 0x00FF);
|
||||
data_r[68] = CONF_transmission_method;
|
||||
data_r[69] = CONF_master_FDD;
|
||||
IP_int2char(CONF_master_down_IP, data_r+70);
|
||||
data_r[74] = CONF_Eth_mode + 0xF0;
|
||||
}
|
||||
+84
@@ -0,0 +1,84 @@
|
||||
// This file is part of "NPR70 modem firmware" software
|
||||
// (A GMSK data modem for ham radio 430-440MHz, at several hundreds of kbps)
|
||||
// Copyright (c) 2017-2018 Guillaume F. F4HDK (amateur radio callsign)
|
||||
//
|
||||
// "NPR70 modem firmware" is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// "NPR70 modem firmware" is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with "NPR70 modem firmware". If not, see <http://www.gnu.org/licenses/>
|
||||
|
||||
#ifndef CONFIG_FLASH_F4
|
||||
#define CONFIG_FLASH_F4
|
||||
|
||||
#include "mbed.h"
|
||||
|
||||
//#define NFPR_config_addr_begin 0x08030000
|
||||
#define NFPR_config_addr_begin 0x0803C000
|
||||
|
||||
#define NFPR_default_config { \
|
||||
0,0,0,0, /* index*/\
|
||||
0, /* is_master*/\
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /*callsign*/\
|
||||
1, /* telnet_active*/\
|
||||
24, /* modulation*/\
|
||||
175, /* frequency (175 = 437MHz)*/\
|
||||
0, /* radio_netw_ID*/\
|
||||
0, /* client_static_IP*/\
|
||||
0,0,0,1, /* client_req_size*/\
|
||||
1, /* DHCP server active*/\
|
||||
44,168,40,170, /* modem_IP*/\
|
||||
255,255,255,0, /*netmask*/\
|
||||
0,0,0,32, /* IP_size*/\
|
||||
1, /* DNS_active*/\
|
||||
1,1,1,1, /* DNS_value*/\
|
||||
1, /* def_route_active*/\
|
||||
44,168,40,174, /* def_route_val*/\
|
||||
44,168,40,65, /*IP_begin*/\
|
||||
1, /* telnet_routed*/\
|
||||
0,0, /* MAC 2 LS bytes*/\
|
||||
0, /* radio_on_at_start*/\
|
||||
127, /* RF_power*/\
|
||||
0,0, /* checksum*/\
|
||||
66, 104, /* frequency MSB LSB 437.000*/\
|
||||
00, 00, /* frequency shift MSB LSB 0*/\
|
||||
0, /* transmission method 0=IP 1=Ethernet*/\
|
||||
0, /* master_FDD 0=no 1=down 2=up*/\
|
||||
44,168,40,252,/*master_FDD_down_IP*/\
|
||||
7, /* CONF_Eth*/\
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0, /*static client 0 24 entries*/\
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /*static client 7*/\
|
||||
}
|
||||
|
||||
unsigned int virt_EEPROM_read(unsigned char* data);
|
||||
|
||||
unsigned char NFPR_random_generator(AnalogIn* analog_pin);
|
||||
|
||||
unsigned int virt_EEPROM_write(unsigned char* in_data, unsigned int previous_index);
|
||||
|
||||
void virt_EEPROM_errase_all(void);
|
||||
|
||||
void virt_EEPROM_debug_read(void);
|
||||
|
||||
void apply_config_from_raw_string(unsigned char* data_r);
|
||||
|
||||
void write_config_to_raw_string (unsigned char* data_r);
|
||||
|
||||
void NFPR_config_read(AnalogIn* analog_pin);
|
||||
|
||||
unsigned int NFPR_config_save(void);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,80 @@
|
||||
// COPYRIGHT=2015 Silicon Laboratories, Inc.
|
||||
// GENERATED=09:13 October 20 2015
|
||||
// ROMID=0x06
|
||||
// FUNCTION=TEST
|
||||
// MAJOR=0
|
||||
// MINOR=0
|
||||
// BUILD=0
|
||||
// PATCHID=0xCA90
|
||||
// REQUIRES=NONE
|
||||
// SIZE=512
|
||||
// CRCT=0x714b
|
||||
|
||||
#define SI446X_PATCH_ROMID 00
|
||||
#define SI446X_PATCH_ID 00
|
||||
|
||||
#define SI446X_PATCH_CMDS \
|
||||
0x08,0x04,0x21,0x71,0x4B,0x00,0x00,0xDC,0x95, \
|
||||
0x08,0x05,0xA6,0x22,0x21,0xF0,0x41,0x5B,0x26, \
|
||||
0x08,0xE2,0x2F,0x1C,0xBB,0x0A,0xA8,0x94,0x28, \
|
||||
0x08,0x05,0x87,0x67,0xE2,0x58,0x1A,0x07,0x5B, \
|
||||
0x08,0xE1,0xD0,0x72,0xD8,0x8A,0xB8,0x5B,0x7D, \
|
||||
0x08,0x05,0x11,0xEC,0x9E,0x28,0x23,0x1B,0x6D, \
|
||||
0x08,0xE2,0x4F,0x8A,0xB2,0xA9,0x29,0x14,0x13, \
|
||||
0x08,0x05,0xD1,0x2E,0x71,0x6A,0x51,0x4C,0x2C, \
|
||||
0x08,0xE5,0x80,0x27,0x42,0xA4,0x69,0xB0,0x7F, \
|
||||
0x08,0x05,0xAA,0x81,0x2A,0xBD,0x45,0xE8,0xA8, \
|
||||
0x08,0xEA,0xE4,0xF0,0x24,0xC9,0x9F,0xCC,0x3C, \
|
||||
0x08,0x05,0x08,0xF5,0x05,0x04,0x27,0x62,0x98, \
|
||||
0x08,0xEA,0x6B,0x62,0x84,0xA1,0xF9,0x4A,0xE2, \
|
||||
0x08,0x05,0xE9,0x77,0x05,0x4F,0x84,0xEE,0x35, \
|
||||
0x08,0xE2,0x43,0xC3,0x8D,0xFB,0xAD,0x54,0x25, \
|
||||
0x08,0x05,0x14,0x06,0x5E,0x39,0x36,0x2F,0x45, \
|
||||
0x08,0xEA,0x0C,0x1C,0x74,0xD0,0x11,0xFC,0x32, \
|
||||
0x08,0x05,0xDA,0x38,0xBA,0x0E,0x3C,0xE7,0x8B, \
|
||||
0x08,0xEA,0xB0,0x09,0xE6,0xFF,0x94,0xBB,0xA9, \
|
||||
0x08,0x05,0xD7,0x11,0x29,0xFE,0xDC,0x71,0xD5, \
|
||||
0x08,0xEA,0x7F,0x83,0xA7,0x60,0x90,0x62,0x18, \
|
||||
0x08,0x05,0x84,0x7F,0x6A,0xD1,0x91,0xC6,0x52, \
|
||||
0x08,0xEA,0x2A,0xD8,0x7B,0x8E,0x4A,0x9F,0x91, \
|
||||
0x08,0x05,0xBD,0xAA,0x9D,0x16,0x18,0x06,0x15, \
|
||||
0x08,0xE2,0x55,0xAD,0x2D,0x0A,0x14,0x1F,0x5D, \
|
||||
0x08,0x05,0xD3,0xE0,0x7C,0x39,0xCF,0x01,0xF0, \
|
||||
0x08,0xEF,0x3A,0x91,0x72,0x6A,0x03,0xBB,0x96, \
|
||||
0x08,0xE7,0x83,0x6D,0xA4,0x92,0xFC,0x13,0xA7, \
|
||||
0x08,0xEF,0xF8,0xFD,0xCF,0x62,0x07,0x6F,0x1E, \
|
||||
0x08,0xE7,0x4C,0xEA,0x4A,0x75,0x4F,0xD6,0xCF, \
|
||||
0x08,0xE2,0xF6,0x11,0xE4,0x26,0x0D,0x4D,0xC6, \
|
||||
0x08,0x05,0xFB,0xBF,0xE8,0x07,0x89,0xC3,0x51, \
|
||||
0x08,0xEF,0x82,0x27,0x04,0x3F,0x96,0xA8,0x58, \
|
||||
0x08,0xE7,0x41,0x29,0x3C,0x75,0x2A,0x03,0x1C, \
|
||||
0x08,0xEF,0xAF,0x59,0x98,0x36,0xAA,0x0F,0x06, \
|
||||
0x08,0xE6,0xF6,0x93,0x41,0x2D,0xEC,0x0E,0x99, \
|
||||
0x08,0x05,0x29,0x19,0x90,0xE5,0xAA,0x36,0x40, \
|
||||
0x08,0xE7,0xFB,0x68,0x10,0x7D,0x77,0x5D,0xC0, \
|
||||
0x08,0xE7,0xCB,0xB4,0xDD,0xCE,0x90,0x54,0xBE, \
|
||||
0x08,0xE7,0x72,0x8A,0xD6,0x02,0xF4,0xDD,0xCC, \
|
||||
0x08,0xE7,0x6A,0x21,0x0B,0x02,0x86,0xEC,0x15, \
|
||||
0x08,0xE7,0x7B,0x7C,0x3D,0x6B,0x81,0x03,0xD0, \
|
||||
0x08,0xEF,0x7D,0x61,0x36,0x94,0x7C,0xA0,0xDF, \
|
||||
0x08,0xEF,0xCC,0x85,0x3B,0xDA,0xE0,0x5C,0x1C, \
|
||||
0x08,0xE7,0xE3,0x75,0xBB,0x39,0x22,0x4B,0xA8, \
|
||||
0x08,0xEF,0xF9,0xCE,0xE0,0x5E,0xEB,0x1D,0xCB, \
|
||||
0x08,0xE7,0xBD,0xE2,0x70,0xD5,0xAB,0x4E,0x3F, \
|
||||
0x08,0xE7,0xB7,0x8D,0x20,0x68,0x6B,0x09,0x52, \
|
||||
0x08,0xEF,0xA1,0x1B,0x90,0xCD,0x98,0x00,0x63, \
|
||||
0x08,0xEF,0x54,0x67,0x5D,0x9C,0x11,0xFC,0x45, \
|
||||
0x08,0xE7,0xD4,0x9B,0xC8,0x97,0xBE,0x8A,0x07, \
|
||||
0x08,0xEF,0x52,0x8D,0x90,0x63,0x73,0xD5,0x2A, \
|
||||
0x08,0xEF,0x03,0xBC,0x6E,0x1C,0x76,0xBE,0x4A, \
|
||||
0x08,0xE7,0xC2,0xED,0x67,0xBA,0x5E,0x66,0x21, \
|
||||
0x08,0xEF,0xE7,0x3F,0x87,0xBE,0xE0,0x7A,0x6D, \
|
||||
0x08,0xE7,0xC9,0x70,0x93,0x1D,0x64,0xF5,0x6C, \
|
||||
0x08,0xEF,0xF5,0x28,0x08,0x34,0xB3,0xB6,0x2C, \
|
||||
0x08,0xEF,0x3A,0x0A,0xEC,0x0F,0xDB,0x56,0xCA, \
|
||||
0x08,0xEF,0x39,0xA0,0x6E,0xED,0x79,0xD0,0x24, \
|
||||
0x08,0xE7,0x6C,0x0B,0xAF,0xA9,0x4E,0x40,0xB5, \
|
||||
0x08,0xE9,0xB9,0xAF,0xBF,0x25,0x50,0xD1,0x37, \
|
||||
0x08,0x05,0x9E,0xDB,0xDE,0x3F,0x94,0xE9,0x6B, \
|
||||
0x08,0xEC,0xC5,0x05,0xAA,0x57,0xDC,0x8A,0x5E, \
|
||||
0x08,0x05,0x70,0xDA,0x84,0x84,0xDD,0xCA,0x90
|
||||
+246
@@ -0,0 +1,246 @@
|
||||
// This file is part of "NPR70 modem firmware" software
|
||||
// (A GMSK data modem for ham radio 430-440MHz, at several hundreds of kbps)
|
||||
// Copyright (c) 2017-2020 Guillaume F. F4HDK (amateur radio callsign)
|
||||
//
|
||||
// "NPR70 modem firmware" is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// "NPR70 modem firmware" is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with "NPR70 modem firmware". If not, see <http://www.gnu.org/licenses/>
|
||||
|
||||
#ifdef EXT_SRAM_USAGE
|
||||
|
||||
#include "mbed.h"
|
||||
#include "global_variables.h"
|
||||
#include "ext_SRAM2.h"
|
||||
|
||||
static unsigned char trash[350];
|
||||
static unsigned short int extSRAM_FIFOs[8][94];// 8 FIFO of pointers to extSRAM
|
||||
static unsigned char extSRAM_filling[374];// 0 : empty frame slot; 1: occupied frame slot
|
||||
static int extSRAM_total_filling = 0;
|
||||
static unsigned char extSRAM_pkt_timer[374];// timer of each frame
|
||||
static unsigned short int extSRAM_pkt_size[374];// size of each frame
|
||||
static unsigned char extSRAM_FIFO_index_read[8];//Read pointers of FIFO
|
||||
static unsigned char extSRAM_FIFO_index_write[8];//write pointers of FIFO
|
||||
static unsigned char extSRAM_FIFO_filling[8];
|
||||
|
||||
void ext_SRAM_init(void) {
|
||||
int i;
|
||||
int j;
|
||||
for (i=0; i<8; i++) {
|
||||
extSRAM_FIFO_index_read[i] = 0;
|
||||
extSRAM_FIFO_index_write[i] = 0;
|
||||
extSRAM_FIFO_filling[i] = 0;
|
||||
}
|
||||
extSRAM_total_filling = 0;
|
||||
}
|
||||
|
||||
void ext_SRAM_set_mode(ext_SRAM_chip* loc_SPI) {
|
||||
static unsigned char command[6] = {0x01, 0x40, 0x00, 0x00};
|
||||
loc_SPI->cs->write(0);
|
||||
loc_SPI->spi_port->transfer_2 (command, 2, trash, 2);
|
||||
loc_SPI->cs->write(1);
|
||||
}
|
||||
|
||||
/*
|
||||
void ext_SRAM_read2(ext_SRAM_chip* loc_SPI, unsigned char* loc_data, unsigned int address, int size) {
|
||||
static unsigned char command[6] = {0x03, 0x00, 0x00, 0x00};
|
||||
loc_SPI->cs->write(0);
|
||||
command[3] = address & 0xFF;
|
||||
command[2] = (address & 0xFF00) >> 8;
|
||||
command[1] = (address & 0xFF0000) >> 16;
|
||||
loc_SPI->spi_port->transfer_2 (command, 4, trash, 4);
|
||||
loc_SPI->spi_port->transfer_2 (trash, size, loc_data, size);
|
||||
loc_SPI->cs->write(1);
|
||||
}
|
||||
*/
|
||||
|
||||
void ext_SRAM_write(ext_SRAM_chip* loc_SPI, unsigned char* loc_data, unsigned int address, int size) {
|
||||
//static unsigned char trash[350];
|
||||
static unsigned char command[6] = {0x02, 0x00, 0x00, 0x00};
|
||||
loc_SPI->cs->write(0);
|
||||
command[3] = address & 0xFF;
|
||||
command[2] = (address & 0xFF00) >> 8;
|
||||
command[1] = (address & 0xFF0000) >> 16;
|
||||
loc_SPI->spi_port->transfer_2 (command, 4, trash, 4);
|
||||
loc_SPI->spi_port->transfer_2 (loc_data, size, trash, size);
|
||||
loc_SPI->cs->write(1);
|
||||
}
|
||||
|
||||
int extSRAM_testfreespace(int pkt_nb, unsigned char FIFO_index) {
|
||||
int freespace_available = 1;
|
||||
if ( (extSRAM_FIFO_filling[FIFO_index] + pkt_nb) > 94 ) {
|
||||
freespace_available = 0;
|
||||
}
|
||||
if ( (extSRAM_total_filling + pkt_nb) > 374 ) {
|
||||
freespace_available = 0;
|
||||
}
|
||||
return freespace_available;
|
||||
}
|
||||
|
||||
void extSRAM_push(unsigned char* raw_data, int size, unsigned char FIFO_nb) {
|
||||
unsigned short int i;
|
||||
unsigned short int free_slot = 0xFFFF;
|
||||
for (i=0; i<350; i++) {
|
||||
if (extSRAM_filling[i] == 0) {
|
||||
free_slot = i;
|
||||
}
|
||||
}
|
||||
if (free_slot != 0xFFFF) {
|
||||
extSRAM_filling[free_slot] = 1;
|
||||
extSRAM_FIFOs[FIFO_nb][extSRAM_FIFO_index_write[FIFO_nb]] = free_slot;
|
||||
extSRAM_FIFO_index_write[FIFO_nb] ++;
|
||||
if (extSRAM_FIFO_index_write[FIFO_nb] > 93) {
|
||||
extSRAM_FIFO_index_write[FIFO_nb] = 0;
|
||||
}
|
||||
extSRAM_total_filling ++;
|
||||
extSRAM_FIFO_filling[FIFO_nb]++;
|
||||
extSRAM_pkt_timer[free_slot] = raw_data[0];
|
||||
extSRAM_pkt_size[free_slot] = size;
|
||||
ext_SRAM_write (SPI_SRAM_p, raw_data, free_slot*350, size);
|
||||
} else {
|
||||
printf("ERROR extSRAM push\r\n");
|
||||
}
|
||||
}
|
||||
|
||||
void TXPS_FIFO_fill(unsigned char* loc_data, int size) {
|
||||
int size_to_write;
|
||||
if ( ( (TXPS_FIFO->WR_point & TXPS_FIFO->mask) + size) > TXPS_FIFO->mask) { // to big for 1 step
|
||||
size_to_write = (TXPS_FIFO->mask + 1 - (TXPS_FIFO->WR_point & TXPS_FIFO->mask) );
|
||||
//G_SI4463->spi->transfer_2 (TXPS_FIFO->data + (TXPS_FIFO->WR_point & TXPS_FIFO->mask), size_to_write, SI_trash, size_to_write);
|
||||
memcpy (TXPS_FIFO->data + (TXPS_FIFO->WR_point & TXPS_FIFO->mask), loc_data, size_to_write);
|
||||
TXPS_FIFO->WR_point = TXPS_FIFO->WR_point + size_to_write; // should become ZERO
|
||||
//second step
|
||||
size_to_write = size - size_to_write;
|
||||
//G_SI4463->spi->transfer_2 (TXPS_FIFO->data + (TXPS_FIFO->WR_point & TXPS_FIFO->mask), size_to_write, SI_trash, size_to_write);
|
||||
memcpy (TXPS_FIFO->data + (TXPS_FIFO->WR_point & TXPS_FIFO->mask), loc_data, size_to_write);
|
||||
TXPS_FIFO->WR_point = TXPS_FIFO->WR_point + size_to_write;
|
||||
TXPS_FIFO->last_ready = TXPS_FIFO->WR_point;
|
||||
} else { //1 step is enough
|
||||
//G_SI4463->spi->transfer_2 (TXPS_FIFO->data + (TXPS_FIFO->WR_point & TXPS_FIFO->mask), size, SI_trash, size);
|
||||
memcpy (TXPS_FIFO->data + (TXPS_FIFO->WR_point & TXPS_FIFO->mask), loc_data, size);
|
||||
TXPS_FIFO->WR_point = TXPS_FIFO->WR_point + size;
|
||||
TXPS_FIFO->last_ready = TXPS_FIFO->WR_point;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
void ext_SRAM_periodic_call(void) {
|
||||
int intern_FIFO_filling;
|
||||
int ext_FIFO_filling;
|
||||
intern_FIFO_filling = TX_buff_intern_WR_pointer - TX_buff_intern_RD_pointer;
|
||||
ext_FIFO_filling = TX_buff_ext_WR_pointer - TX_buff_ext_RD_pointer;
|
||||
while ( (ext_FIFO_filling > 0) && (intern_FIFO_filling <= 9) ) {
|
||||
ext_SRAM_read(SPI_SRAM_p, TX_buff_intern_FIFOdata[TX_buff_intern_WR_pointer % 128], TX_buff_ext_RD_pointer*128, 128);
|
||||
TX_buff_ext_RD_pointer++;
|
||||
TX_buff_intern_WR_pointer++;
|
||||
TX_buff_intern_last_ready = TX_buff_intern_WR_pointer;
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void ext_SRAM_periodic_call() {
|
||||
static unsigned char current_buff;
|
||||
unsigned char radio_pckt[360];
|
||||
unsigned char nb_buffer_treated = 0;
|
||||
unsigned char frame_datation;
|
||||
unsigned char loc_time_char;
|
||||
unsigned int loc_time_int;
|
||||
unsigned short int extSRAM_pointer;
|
||||
int one_packet_ok = 0;
|
||||
int switch_to_next_buff = 0;
|
||||
int fifo_full;
|
||||
int frame_size;
|
||||
|
||||
nb_buffer_treated = 0;
|
||||
loc_time_int = GLOBAL_timer.read_us();
|
||||
loc_time_char = (loc_time_int >> 16) & 0xFF;
|
||||
//condition a rajouter sur buffer interne TXPS
|
||||
if ((TXPS_FIFO->last_ready - TXPS_FIFO->RD_point) < 3740 ) { //16380 - 350 ; 3740
|
||||
fifo_full = 0;
|
||||
} else {
|
||||
fifo_full = 1;
|
||||
}
|
||||
//printf("FIFO full : %i\r\n", fifo_full);
|
||||
while ( (nb_buffer_treated<8) && (one_packet_ok==0) && (fifo_full == 0) ) {//loop over all buffers
|
||||
switch_to_next_buff = 0;
|
||||
if (extSRAM_FIFO_filling[current_buff] > 0) {//data available in current buffer
|
||||
extSRAM_pointer = extSRAM_FIFOs[current_buff][extSRAM_FIFO_index_read[current_buff]];
|
||||
frame_datation = extSRAM_pkt_timer[extSRAM_pointer];
|
||||
//frame_size = extSRAM_pkt_size[extSRAM_pointer] + 2 + SI4463_offset_size;
|
||||
frame_size = extSRAM_pkt_size[extSRAM_pointer];
|
||||
if ( (loc_time_char - frame_datation) < CONF_Tx_rframe_timeout) {//frame ok
|
||||
//printf("frame OK ext SRAM\r\n");
|
||||
ext_SRAM_read (SPI_SRAM_p, radio_pckt, extSRAM_pointer*350, frame_size);
|
||||
radio_pckt[1] = frame_size - 2 - SI4463_offset_size;//-2
|
||||
TXPS_FIFO_fill (radio_pckt, frame_size);
|
||||
switch_to_next_buff = 1;
|
||||
one_packet_ok = 1;
|
||||
} else {//old frame
|
||||
switch_to_next_buff = 0;
|
||||
}
|
||||
extSRAM_filling[extSRAM_pointer] = 0;
|
||||
extSRAM_FIFO_index_read[current_buff]++;
|
||||
if (extSRAM_FIFO_index_read[current_buff] > 93) {
|
||||
extSRAM_FIFO_index_read[current_buff] = 0;
|
||||
}
|
||||
extSRAM_FIFO_filling[current_buff]--;
|
||||
extSRAM_total_filling--;
|
||||
|
||||
}
|
||||
else {//no data in the current buffer
|
||||
switch_to_next_buff = 1;
|
||||
}
|
||||
if (switch_to_next_buff == 1) {
|
||||
current_buff++;
|
||||
if (current_buff>7) {current_buff = 0;}
|
||||
nb_buffer_treated++;
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
void ext_SRAM_test(ext_SRAM_chip* loc_SPI) {
|
||||
unsigned char test_table[400] = "bonjour!!";
|
||||
unsigned char test_table2[400];
|
||||
unsigned long int timer1;
|
||||
unsigned long int timer2;
|
||||
unsigned int loc_address;
|
||||
int i, j;
|
||||
printf("\r\nsram test begin\r\n");
|
||||
//loc_SPI->cs->write(1);
|
||||
for (i=0; i<5000; i++) {
|
||||
loc_address = 16 * i;
|
||||
//wait_ms(1);
|
||||
sprintf ((char*)test_table, "jourbon %i", i);
|
||||
ext_SRAM_write(loc_SPI, test_table, loc_address, 20);
|
||||
printf("write %i\r\n", i);
|
||||
}
|
||||
for (i=0; i<5000; i++) {
|
||||
loc_address = 16 * i;
|
||||
for (j=0; j<30; j++) {
|
||||
test_table2[j] = 0;
|
||||
}
|
||||
//wait_ms(1);
|
||||
ext_SRAM_read2(loc_SPI, test_table2, loc_address, 20);
|
||||
test_table2[12] = 0;
|
||||
printf ("read addr %i content '%s' \r\n", loc_address, test_table2);
|
||||
}
|
||||
timer1 = GLOBAL_timer.read_us();
|
||||
for (i=0; i<10; i++) {
|
||||
memcpy(test_table2+i, test_table+i, 350);
|
||||
}
|
||||
timer2 = GLOBAL_timer.read_us();
|
||||
printf("temps memcpy 350 %i\r\n", timer2-timer1);
|
||||
}
|
||||
|
||||
#endif
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
// This file is part of "NPR70 modem firmware" software
|
||||
// (A GMSK data modem for ham radio 430-440MHz, at several hundreds of kbps)
|
||||
// Copyright (c) 2017-2020 Guillaume F. F4HDK (amateur radio callsign)
|
||||
//
|
||||
// "NPR70 modem firmware" is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// "NPR70 modem firmware" is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with "NPR70 modem firmware". If not, see <http://www.gnu.org/licenses/>
|
||||
|
||||
#ifndef EXT_SRAM_F4
|
||||
#define EXT_SRAM_F4
|
||||
|
||||
#include "mbed.h"
|
||||
|
||||
struct ext_SRAM_chip{
|
||||
SPI* spi_port;
|
||||
DigitalOut* cs;
|
||||
};
|
||||
|
||||
void ext_SRAM_init(void);
|
||||
|
||||
void ext_SRAM_set_mode(ext_SRAM_chip* loc_SPI);
|
||||
|
||||
//void ext_SRAM_read2(ext_SRAM_chip* loc_SPI, unsigned char* loc_data, unsigned int address, int size);
|
||||
|
||||
void ext_SRAM_write(ext_SRAM_chip* loc_SPI, unsigned char* loc_data, unsigned int address, int size);
|
||||
|
||||
int extSRAM_testfreespace(int pkt_nb, unsigned char FIFO_index);
|
||||
|
||||
void extSRAM_push(unsigned char* raw_data, int size, unsigned char FIFO_nb);
|
||||
|
||||
//void ext_SRAM_periodic_call();
|
||||
|
||||
void ext_SRAM_test(ext_SRAM_chip* loc_SPI);
|
||||
|
||||
#endif
|
||||
+168
@@ -0,0 +1,168 @@
|
||||
// This file is part of "NPR70 modem firmware" software
|
||||
// (A GMSK data modem for ham radio 430-440MHz, at several hundreds of kbps)
|
||||
// Copyright (c) 2017-2020 Guillaume F. F4HDK (amateur radio callsign)
|
||||
//
|
||||
// "NPR70 modem firmware" is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// "NPR70 modem firmware" is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with "NPR70 modem firmware". If not, see <http://www.gnu.org/licenses/>
|
||||
|
||||
#include "SI4463.h"
|
||||
#include "W5500.h"
|
||||
#include "global_variables.h"
|
||||
#include "ext_SRAM2.h"
|
||||
|
||||
SI4463_Chip* G_SI4463;
|
||||
W5500_chip* W5500_p1;
|
||||
DigitalInOut* G_FDD_trig_pin;
|
||||
InterruptIn* G_FDD_trig_IRQ;
|
||||
DigitalOut* G_PTT_PA_pin;
|
||||
|
||||
ext_SRAM_chip* SPI_SRAM_p;
|
||||
|
||||
Serial pc(SERIAL_TX, SERIAL_RX);
|
||||
//DigitalOut* LED_connected_p;
|
||||
|
||||
Timeout SI4463_prepa_TX_1_call;
|
||||
|
||||
char HMI_out_str[120];
|
||||
|
||||
unsigned int RX_FIFO_WR_point = 0;
|
||||
unsigned int RX_FIFO_RD_point = 0;
|
||||
unsigned int RX_FIFO_last_received = 0;
|
||||
unsigned char RX_FIFO_data[0x2000]; //8kB
|
||||
|
||||
//unsigned int debug_counter = 0;
|
||||
unsigned int RX_top_FDD_up_counter = 0;
|
||||
int RX_Eth_IPv4_counter = 0;
|
||||
int TX_radio_IPv4_counter = 0;
|
||||
int RX_radio_IPv4_counter = 0;
|
||||
unsigned int RSSI_total_stat = 0;
|
||||
unsigned int RSSI_stat_pkt_nb = 0;
|
||||
|
||||
|
||||
int slave_new_burst_tx_pending = 0;
|
||||
|
||||
unsigned char TX_buff_intern_FIFOdata[128][128];
|
||||
unsigned int TX_buff_intern_WR_pointer=0;
|
||||
unsigned int TX_buff_intern_RD_pointer=0;
|
||||
unsigned int TX_buff_intern_last_ready=0;
|
||||
|
||||
unsigned char TX_buff_ext_sizes[1024];//1024
|
||||
unsigned int TX_buff_ext_WR_pointer;
|
||||
unsigned int TX_buff_ext_RD_pointer;
|
||||
unsigned int TX_buff_ext_last_ready;
|
||||
|
||||
unsigned char TX_TDMA_intern_data[384];
|
||||
|
||||
unsigned char is_TDMA_master = 0; //truc
|
||||
unsigned char is_telnet_active = 1;
|
||||
unsigned char is_telnet_routed = 0;
|
||||
unsigned char CONF_radio_modulation;
|
||||
unsigned char CONF_radio_frequency;
|
||||
unsigned char CONF_frequency_band;
|
||||
unsigned char CONF_radio_network_ID;
|
||||
unsigned short int CONF_frequency_HD;
|
||||
short int CONF_freq_shift=0;
|
||||
unsigned char CONF_channel_TX;
|
||||
unsigned char CONF_channel_RX;
|
||||
unsigned char CONF_SI4463_freq_conf_RX[15];
|
||||
unsigned char CONF_SI4463_freq_conf_TX[15];
|
||||
unsigned char CONF_transmission_method=0;
|
||||
unsigned char CONF_master_FDD=0;
|
||||
unsigned long int CONF_master_down_IP;
|
||||
unsigned int CONF_TDMA_frame_duration = 65000; //
|
||||
unsigned int CONF_TDMA_slot_duration = 3360;
|
||||
unsigned int CONF_reduced_TDMA_slot_duration = 2360;
|
||||
unsigned int CONF_TDMA_slot_margin = 300;
|
||||
unsigned int CONF_TR_margain = 500;
|
||||
unsigned int CONF_TA_margain = 2000;
|
||||
unsigned int CONF_preamble_duration_for_decide = 590;
|
||||
unsigned int CONF_long_preamble_duration_for_TA = 1000;
|
||||
unsigned int CONF_byte_duration = 8;
|
||||
unsigned int CONF_additional_preamble = 700;
|
||||
unsigned long int CONF_radio_timeout = 30000000;
|
||||
unsigned long int CONF_radio_timeout_small = 10000000;
|
||||
unsigned int offset_time_TX_slave = 48000;
|
||||
unsigned int time_next_TX_slave;
|
||||
unsigned int time_max_TX_burst = 45000;//47000
|
||||
int CONF_delay_prepTX1_2_TX = 1030;
|
||||
unsigned char my_radio_client_ID = 0xFE;
|
||||
int CONF_Tx_rframe_timeout = 30;//unit 1/65000 th of a second
|
||||
int CONF_signaling_period = 1;
|
||||
int is_SRAM_ext=1;
|
||||
int DEBUG_max_rx_size_w5500=0;
|
||||
|
||||
unsigned int TDMA_slave_last_master_top = 0;
|
||||
|
||||
Timer GLOBAL_timer;
|
||||
|
||||
LAN_conf_T LAN_conf_saved;
|
||||
LAN_conf_T LAN_conf_applied;
|
||||
|
||||
unsigned char CONF_modem_MAC[6];
|
||||
unsigned char CONF_Eth_mode = 0x07;
|
||||
|
||||
char CONF_radio_my_callsign[16];
|
||||
char CONF_radio_master_callsign[16];
|
||||
unsigned long int CONF_radio_addr_table_IP_begin[radio_addr_table_size];
|
||||
unsigned long int CONF_radio_addr_table_IP_size[radio_addr_table_size];
|
||||
char CONF_radio_addr_table_callsign[radio_addr_table_size][16];
|
||||
char CONF_radio_addr_table_status[radio_addr_table_size];
|
||||
unsigned int CONF_radio_addr_table_date[radio_addr_table_size];
|
||||
unsigned long int CONF_radio_IP_start;
|
||||
unsigned long int CONF_radio_IP_size;
|
||||
unsigned int my_client_radio_connexion_state;
|
||||
unsigned int my_client_radio_connexion_date;
|
||||
unsigned char G_connect_rejection_reason;
|
||||
int G_temperature_SI4463;
|
||||
int G_need_temperature_check = 0;
|
||||
unsigned long int CONF_radio_IP_size_requested;
|
||||
unsigned char CONF_radio_static_IP_requested;
|
||||
unsigned char CONF_radio_state_ON_OFF = 0;
|
||||
unsigned char CONF_radio_default_state_ON_OFF;
|
||||
unsigned char CONF_radio_PA_PWR = 0x7F;
|
||||
unsigned char CONF_preamble_TX_long;
|
||||
unsigned char CONF_preamble_TX_short;
|
||||
unsigned long int last_rframe_seen = 0;
|
||||
|
||||
long int TDMA_table_TA[radio_addr_table_size];
|
||||
|
||||
unsigned short int G_downlink_RSSI;
|
||||
unsigned short int G_radio_addr_table_RSSI[radio_addr_table_size];
|
||||
unsigned short int G_downlink_BER;
|
||||
unsigned short int G_radio_addr_table_BER[radio_addr_table_size];
|
||||
short int G_downlink_TA;
|
||||
int G_downlink_bandwidth_temp;
|
||||
int G_uplink_bandwidth_temp;
|
||||
|
||||
int super_debug = 0;
|
||||
|
||||
unsigned char parity_bit_elab[128] = {
|
||||
0x00,0x80,0x80,0x00,0x80,0x00,0x00,0x80,0x80,0x00,0x00,0x80,0x00,0x80,0x80,0x00,
|
||||
0x80,0x00,0x00,0x80,0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x80,0x00,0x00,0x80,
|
||||
0x80,0x00,0x00,0x80,0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x80,0x00,0x00,0x80,
|
||||
0x00,0x80,0x80,0x00,0x80,0x00,0x00,0x80,0x80,0x00,0x00,0x80,0x00,0x80,0x80,0x00,
|
||||
0x80,0x00,0x00,0x80,0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x80,0x00,0x00,0x80,
|
||||
0x00,0x80,0x80,0x00,0x80,0x00,0x00,0x80,0x80,0x00,0x00,0x80,0x00,0x80,0x80,0x00,
|
||||
0x00,0x80,0x80,0x00,0x80,0x00,0x00,0x80,0x80,0x00,0x00,0x80,0x00,0x80,0x80,0x00,
|
||||
0x80,0x00,0x00,0x80,0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x80,0x00,0x00,0x80
|
||||
};
|
||||
unsigned char parity_bit_check[256] = {
|
||||
1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,
|
||||
0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,
|
||||
0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,
|
||||
1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,
|
||||
0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,
|
||||
1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,
|
||||
1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,
|
||||
0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1
|
||||
};
|
||||
+207
@@ -0,0 +1,207 @@
|
||||
// This file is part of "NPR70 modem firmware" software
|
||||
// (A GMSK data modem for ham radio 430-440MHz, at several hundreds of kbps)
|
||||
// Copyright (c) 2017-2018 Guillaume F. F4HDK (amateur radio callsign)
|
||||
//
|
||||
// "NPR70 modem firmware" is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// "NPR70 modem firmware" is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with "NPR70 modem firmware". If not, see <http://www.gnu.org/licenses/>
|
||||
|
||||
#ifndef GLOB_VARIAB_F4
|
||||
#define GLOB_VARIAB_F4
|
||||
#include "SI4463.h"
|
||||
#include "W5500.h"
|
||||
|
||||
//#define EXT_SRAM_USAGE
|
||||
//#define FREQ_BAND_2M
|
||||
//#define NPR_L476
|
||||
|
||||
#include "ext_SRAM2.h"
|
||||
extern ext_SRAM_chip* SPI_SRAM_p;
|
||||
|
||||
#ifdef FREQ_BAND_2M
|
||||
#define CONF_DEF_FREQ 1000
|
||||
#define FREQ_RANGE_MIN 144
|
||||
#define FREQ_RANGE_MAX 148
|
||||
#define FREQ_MAX_RAW 4000
|
||||
#define FREQ_BAND "2m"
|
||||
#define SI4463_NOUTDIV 24
|
||||
#else
|
||||
/*420 - 450MHz*/
|
||||
#define CONF_DEF_FREQ 17000
|
||||
#define FREQ_RANGE_MIN 420
|
||||
#define FREQ_RANGE_MAX 450
|
||||
#define FREQ_MAX_RAW 30000
|
||||
#define FREQ_BAND "70cm"
|
||||
#define SI4463_NOUTDIV 8
|
||||
#endif
|
||||
|
||||
#define FW_VERSION "2022_01_24"
|
||||
|
||||
extern SI4463_Chip* G_SI4463;
|
||||
|
||||
extern W5500_chip* W5500_p1;
|
||||
|
||||
extern DigitalInOut* G_FDD_trig_pin;
|
||||
extern InterruptIn* G_FDD_trig_IRQ;
|
||||
extern DigitalOut* G_PTT_PA_pin;
|
||||
|
||||
extern Serial pc;
|
||||
|
||||
extern Timeout SI4463_prepa_TX_1_call;
|
||||
|
||||
extern unsigned char TX_buff_intern_FIFOdata[128][128];
|
||||
extern unsigned int TX_buff_intern_WR_pointer;
|
||||
extern unsigned int TX_buff_intern_RD_pointer;
|
||||
extern unsigned int TX_buff_intern_last_ready;
|
||||
|
||||
extern unsigned char TX_buff_ext_sizes[1024];//1024
|
||||
extern unsigned int TX_buff_ext_WR_pointer;
|
||||
extern unsigned int TX_buff_ext_RD_pointer;
|
||||
extern unsigned int TX_buff_ext_last_ready;
|
||||
|
||||
extern unsigned char TX_TDMA_intern_data[384];
|
||||
|
||||
extern char HMI_out_str[120];
|
||||
|
||||
// RX FIFO (RX from radio)
|
||||
extern unsigned int RX_FIFO_WR_point;
|
||||
extern unsigned int RX_FIFO_RD_point;
|
||||
extern unsigned int RX_FIFO_last_received;
|
||||
//extern unsigned char RX_FIFO_data[0x2000]; //8kB
|
||||
extern unsigned char RX_FIFO_data[0x2000]; //8kB
|
||||
#define RX_FIFO_mask 0x1FFF
|
||||
|
||||
#define TXPS_FIFO_mask 0x3FFF
|
||||
#define TXPS_FIFO_threshold 14000
|
||||
#define TXPS_FIFO_threshold_sig 16380
|
||||
|
||||
//#define CONF_Tx_rframe_timeout 30
|
||||
//CONF_Tx_rframe_timeout unit 1/65000 th of a second
|
||||
// *** TDMA ***
|
||||
extern unsigned char TX_signaling_TDMA_frame[300];
|
||||
|
||||
extern unsigned char is_TDMA_master;
|
||||
extern unsigned char is_telnet_active;
|
||||
extern unsigned char is_telnet_routed;
|
||||
extern unsigned char CONF_radio_modulation;
|
||||
extern unsigned char CONF_radio_frequency;
|
||||
extern unsigned char CONF_frequency_band;
|
||||
extern unsigned char CONF_radio_network_ID;
|
||||
extern unsigned short int CONF_frequency_HD;
|
||||
extern short int CONF_freq_shift;
|
||||
extern unsigned char CONF_channel_TX;
|
||||
extern unsigned char CONF_channel_RX;
|
||||
extern unsigned char CONF_SI4463_freq_conf_RX[15];
|
||||
extern unsigned char CONF_SI4463_freq_conf_TX[15];
|
||||
extern unsigned char CONF_transmission_method;
|
||||
extern unsigned char CONF_master_FDD;
|
||||
extern unsigned long int CONF_master_down_IP;
|
||||
extern unsigned int CONF_TDMA_frame_duration;
|
||||
extern unsigned int CONF_TDMA_slot_duration;
|
||||
extern unsigned int CONF_reduced_TDMA_slot_duration;
|
||||
extern unsigned int CONF_TDMA_slot_margin;
|
||||
extern unsigned int CONF_TR_margain;
|
||||
extern unsigned int CONF_TA_margain;
|
||||
extern unsigned int CONF_preamble_duration_for_decide;
|
||||
extern unsigned int CONF_long_preamble_duration_for_TA;
|
||||
extern unsigned int CONF_byte_duration;
|
||||
extern unsigned int CONF_additional_preamble;
|
||||
extern unsigned long int CONF_radio_timeout;
|
||||
extern unsigned long int CONF_radio_timeout_small;
|
||||
extern unsigned int offset_time_TX_slave;
|
||||
extern unsigned int time_next_TX_slave;
|
||||
extern unsigned int time_max_TX_burst;
|
||||
extern int CONF_delay_prepTX1_2_TX;
|
||||
extern unsigned char my_radio_client_ID;
|
||||
extern int CONF_Tx_rframe_timeout;
|
||||
extern int CONF_signaling_period;
|
||||
extern int is_SRAM_ext;
|
||||
|
||||
extern int DEBUG_max_rx_size_w5500;
|
||||
|
||||
extern unsigned int TDMA_slave_last_master_top;
|
||||
|
||||
// *** STATISTIC and DEBUG variables ***
|
||||
//extern unsigned int debug_counter;
|
||||
extern unsigned int RX_top_FDD_up_counter;
|
||||
extern int RX_Eth_IPv4_counter;
|
||||
extern int TX_radio_IPv4_counter;
|
||||
extern int RX_radio_IPv4_counter;
|
||||
extern unsigned int RSSI_total_stat;
|
||||
extern unsigned int RSSI_stat_pkt_nb;
|
||||
|
||||
extern int slave_new_burst_tx_pending;
|
||||
|
||||
extern Timer GLOBAL_timer;
|
||||
|
||||
// *** ARP and DHCP and "routing" ***
|
||||
struct LAN_conf_T {
|
||||
|
||||
//unsigned char modem_MAC[6];
|
||||
unsigned long int LAN_modem_IP;
|
||||
unsigned long int DHCP_range_start;
|
||||
unsigned long int DHCP_range_size; //4
|
||||
unsigned long int LAN_subnet_mask;
|
||||
unsigned long int LAN_def_route;
|
||||
unsigned char LAN_def_route_activ;
|
||||
unsigned char LAN_DNS_activ;
|
||||
unsigned long int LAN_DNS_value;
|
||||
unsigned char DHCP_server_active;
|
||||
};
|
||||
|
||||
extern LAN_conf_T LAN_conf_saved;
|
||||
extern LAN_conf_T LAN_conf_applied;
|
||||
|
||||
extern unsigned char CONF_modem_MAC[6];
|
||||
extern unsigned char CONF_Eth_mode;
|
||||
|
||||
#define radio_addr_table_size 7
|
||||
extern char CONF_radio_my_callsign[16];
|
||||
extern char CONF_radio_master_callsign[16];
|
||||
extern unsigned long int CONF_radio_addr_table_IP_begin[radio_addr_table_size];
|
||||
extern unsigned long int CONF_radio_addr_table_IP_size[radio_addr_table_size];
|
||||
extern char CONF_radio_addr_table_callsign[radio_addr_table_size][16];
|
||||
extern char CONF_radio_addr_table_status[radio_addr_table_size];
|
||||
extern unsigned int CONF_radio_addr_table_date[radio_addr_table_size];
|
||||
extern unsigned long int CONF_radio_IP_start;
|
||||
extern unsigned long int CONF_radio_IP_size;
|
||||
extern unsigned int my_client_radio_connexion_state;
|
||||
extern unsigned int my_client_radio_connexion_date;
|
||||
extern unsigned char G_connect_rejection_reason;
|
||||
extern int G_temperature_SI4463;
|
||||
extern int G_need_temperature_check;
|
||||
extern unsigned long int CONF_radio_IP_size_requested;
|
||||
extern unsigned char CONF_radio_static_IP_requested;
|
||||
extern unsigned char CONF_radio_state_ON_OFF;
|
||||
extern unsigned char CONF_radio_default_state_ON_OFF;
|
||||
extern unsigned char CONF_radio_PA_PWR;
|
||||
extern unsigned char CONF_preamble_TX_long;
|
||||
extern unsigned char CONF_preamble_TX_short;
|
||||
extern unsigned long int last_rframe_seen;
|
||||
|
||||
extern long int TDMA_table_TA[radio_addr_table_size];
|
||||
|
||||
extern unsigned short int G_downlink_RSSI;
|
||||
extern unsigned short int G_radio_addr_table_RSSI[radio_addr_table_size];
|
||||
extern unsigned short int G_downlink_BER;
|
||||
extern unsigned short int G_radio_addr_table_BER[radio_addr_table_size];
|
||||
extern short int G_downlink_TA;
|
||||
//extern short int G_radio_addr_table_TA[radio_addr_table_size];
|
||||
extern int G_downlink_bandwidth_temp;
|
||||
extern int G_uplink_bandwidth_temp;
|
||||
|
||||
extern int super_debug;
|
||||
|
||||
extern unsigned char parity_bit_elab[128];
|
||||
extern unsigned char parity_bit_check[256];
|
||||
|
||||
#endif
|
||||
+278
@@ -0,0 +1,278 @@
|
||||
// This file is part of "NPR70 modem firmware" software
|
||||
// (A GMSK data modem for ham radio 430-440MHz, at several hundreds of kbps)
|
||||
// Copyright (c) 2017-2020 Guillaume F. F4HDK (amateur radio callsign)
|
||||
//
|
||||
// "NPR70 modem firmware" is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// "NPR70 modem firmware" is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with "NPR70 modem firmware". If not, see <http://www.gnu.org/licenses/>
|
||||
|
||||
#include "mbed.h"
|
||||
#include "W5500.h"
|
||||
#include "SI4463.h"
|
||||
#include "HMI_telnet.h"
|
||||
//#include "Virt_Chan.h"
|
||||
#include "Eth_IPv4.h"
|
||||
#include "DHCP_ARP.h"
|
||||
#include "global_variables.h"
|
||||
#include "L1L2_radio.h"
|
||||
#include "TDMA.h"
|
||||
#include "signaling.h"
|
||||
#include "config_flash.h"
|
||||
|
||||
#include "ext_SRAM2.h"
|
||||
|
||||
//#define NPR_L476
|
||||
//Serial pc(SERIAL_TX, SERIAL_RX); // Nucleo
|
||||
//Serial pc(USBTX, USBRX); //NXP LPC1769
|
||||
|
||||
DigitalInOut FDD_trig_pin(PA_10);//GPIO_11
|
||||
InterruptIn FDD_trig_IRQ(PA_10);//GPIO_11
|
||||
DigitalOut PTT_PA_pin(PA_9);//GPIO_10
|
||||
|
||||
DigitalOut SI4463_SDN(PA_1);
|
||||
|
||||
AnalogIn Random_pin(PA_0);
|
||||
DigitalOut LED_RX_loc(PB_1);
|
||||
DigitalOut LED_connected(PA_12);
|
||||
|
||||
DigitalIn Int_W5500(PA_8);
|
||||
DigitalOut CS1(PA_11);//CS W5500
|
||||
SPI spi_2(PB_5, PB_4, PB_3); // mosi, miso, sclk
|
||||
DigitalOut CS3(PB_0);// CS ext SRAM PB_0
|
||||
|
||||
InterruptIn Int_SI4463(PA_3);
|
||||
DigitalOut CS2(PA_4);
|
||||
SPI spi_1(PA_7, PA_6, PA_5); // mosi, miso, sclk
|
||||
|
||||
int main()
|
||||
{
|
||||
wait_ms(200);
|
||||
pc.baud(921600);
|
||||
pc.printf("\r\n\r\nNPR FW %s\r\n", FW_VERSION);
|
||||
|
||||
Timer slow_timer;
|
||||
int i = 1;
|
||||
int temperature_timer = 0;
|
||||
|
||||
static LAN_conf_T* LAN_conf_p;
|
||||
LAN_conf_p = &LAN_conf_applied;
|
||||
|
||||
static W5500_chip W5500_1;
|
||||
W5500_p1 = &W5500_1;
|
||||
W5500_1.spi_port = &spi_2;
|
||||
W5500_1.cs = &CS1;
|
||||
W5500_1.interrupt = &Int_W5500;
|
||||
|
||||
//#ifdef EXT_SRAM_USAGE
|
||||
static ext_SRAM_chip SPI_SRAM;
|
||||
SPI_SRAM_p = &SPI_SRAM;
|
||||
SPI_SRAM.spi_port = &spi_2;
|
||||
SPI_SRAM.cs = &CS3;
|
||||
//#endif
|
||||
|
||||
static SI4463_Chip SI4463_1;
|
||||
SI4463_1.spi = &spi_1;//1
|
||||
SI4463_1.cs = &CS2;//2
|
||||
SI4463_1.interrupt = &Int_SI4463;
|
||||
SI4463_1.RX_LED = &LED_RX_loc;
|
||||
SI4463_1.SDN = &SI4463_SDN;
|
||||
|
||||
G_SI4463 = &SI4463_1;
|
||||
|
||||
G_FDD_trig_pin = &FDD_trig_pin;
|
||||
G_FDD_trig_IRQ = &FDD_trig_IRQ;
|
||||
G_PTT_PA_pin = &PTT_PA_pin;
|
||||
|
||||
reset_DHCP_table(LAN_conf_p);
|
||||
|
||||
spi_2.format(8,0);
|
||||
spi_1.format(8,0);
|
||||
spi_2.frequency(20000000);
|
||||
spi_1.frequency(10000000);
|
||||
|
||||
for(i=0; i<radio_addr_table_size; i++) {
|
||||
CONF_radio_addr_table_status[i] = 0;
|
||||
}
|
||||
|
||||
G_FDD_trig_pin->input();
|
||||
G_PTT_PA_pin->write(0);
|
||||
LED_RX_loc = 0;
|
||||
LED_connected = 0;
|
||||
CS1=1;
|
||||
CS2=1;
|
||||
CS3=1;
|
||||
SI4463_SDN = 1;
|
||||
|
||||
wait_ms(20);
|
||||
is_SRAM_ext = ext_SRAM_detect();
|
||||
|
||||
LED_RX_loc = 1;
|
||||
for (i=0; i<7; i++) {
|
||||
wait_ms(200);
|
||||
LED_RX_loc = !LED_RX_loc;
|
||||
LED_connected = !LED_connected;
|
||||
SI4463_SDN = !SI4463_SDN;
|
||||
}
|
||||
LED_RX_loc = 0;
|
||||
LED_connected = 0;
|
||||
SI4463_SDN = 1;
|
||||
|
||||
printf("\r\n");
|
||||
|
||||
RX_FIFO_WR_point = 0;
|
||||
RX_FIFO_RD_point = 0;
|
||||
RX_FIFO_last_received = 0;
|
||||
|
||||
//TXPS_FIFO->is_single = 0;
|
||||
//TXPS_FIFO->WR_point = 0;
|
||||
//TXPS_FIFO->RD_point = 0;
|
||||
//TXPS_FIFO->last_ready = 0;
|
||||
|
||||
GLOBAL_timer.reset();
|
||||
GLOBAL_timer.start();
|
||||
TDMA_init_all();
|
||||
|
||||
//TXPS_FIFO->last_ready = TXPS_FIFO->WR_point;
|
||||
for (i=0; i<0x2000; i++) {
|
||||
RX_FIFO_data[i] = 0;
|
||||
}
|
||||
|
||||
printf(" \r\n");
|
||||
for (i=0; i<radio_addr_table_size; i++) {
|
||||
CONF_radio_addr_table_IP_begin[i] = 0; // 0 = entry not active
|
||||
|
||||
}
|
||||
if (is_SRAM_ext) {
|
||||
printf("config WITH ext SRAM\r\n");
|
||||
} else {
|
||||
printf("config WITHOUT ext SRAM\r\n");
|
||||
}
|
||||
|
||||
wait_ms(100);
|
||||
NFPR_config_read(&Random_pin);
|
||||
|
||||
//SI4463_print_version(G_SI4463);//!!!!
|
||||
SI4463_get_state(G_SI4463);
|
||||
|
||||
i = SI4463_configure_all();
|
||||
if (i == 1) {
|
||||
HMI_printf("SI4463 configured\r\n");
|
||||
} else {
|
||||
HMI_printf("SI4463 error while configure\r\n");
|
||||
SI4463_print_version(G_SI4463);
|
||||
wait_ms(5000);
|
||||
if (serial_term_loop() == 0) {//no serial char detected
|
||||
NVIC_SystemReset(); //reboot
|
||||
}
|
||||
}
|
||||
//SI4463_print_version(G_SI4463);//!!!!
|
||||
|
||||
W5500_initial_configure(W5500_p1);
|
||||
wait_ms(2);
|
||||
#ifdef EXT_SRAM_USAGE
|
||||
ext_SRAM_set_mode(SPI_SRAM_p);
|
||||
wait_ms(2)
|
||||
ext_SRAM_init();
|
||||
#endif
|
||||
TDMA_NULL_frame_init(70);
|
||||
|
||||
SI4463_periodic_temperature_check(G_SI4463);
|
||||
Int_SI4463.fall(&SI4463_HW_interrupt);
|
||||
if (CONF_radio_default_state_ON_OFF) {
|
||||
//TDMA_init_all();
|
||||
//SI4463_radio_start();
|
||||
RADIO_on(1, 0, 1);//init state, no reconfigure, HMI output
|
||||
}
|
||||
HMI_printf("ready> ");
|
||||
slow_timer.start();
|
||||
|
||||
unsigned int timer_snapshot;
|
||||
int slow_action_counter = 0;
|
||||
int signaling_counter = 0;
|
||||
//SI4463_temp_check_init();
|
||||
|
||||
int telnet_counter = 0;
|
||||
|
||||
while(1) {
|
||||
for (i=0; i<100; i++) {
|
||||
if ( (is_TDMA_master == 1) && (CONF_master_FDD == 2) ) {
|
||||
FDDup_RX_FIFO_dequeue();
|
||||
} else {
|
||||
radio_RX_FIFO_dequeue(W5500_p1);
|
||||
}
|
||||
Eth_RX_dequeue(W5500_p1);
|
||||
TDMA_slave_timeout();
|
||||
#ifdef EXT_SRAM_USAGE
|
||||
ext_SRAM_periodic_call();
|
||||
#endif
|
||||
if (is_SRAM_ext == 1) {
|
||||
ext_SRAM_periodic_call();
|
||||
}
|
||||
timer_snapshot = slow_timer.read_us();
|
||||
if (timer_snapshot > 666000) {//666000
|
||||
slow_timer.reset();
|
||||
slow_action_counter++;
|
||||
if (slow_action_counter > 2) {slow_action_counter = 0; }
|
||||
|
||||
if (slow_action_counter == 0) {
|
||||
HMI_periodic_call();
|
||||
}
|
||||
//debug_counter = 0;
|
||||
|
||||
|
||||
if (slow_action_counter == 1) {//every 2 sec
|
||||
signaling_counter++;
|
||||
if (signaling_counter >= CONF_signaling_period) {
|
||||
signaling_periodic_call();
|
||||
signaling_counter = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (slow_action_counter == 2) {
|
||||
DHCP_ARP_periodic_free_table();
|
||||
W5500_re_configure_periodic_call(W5500_p1);
|
||||
|
||||
temperature_timer++;
|
||||
if(temperature_timer > 15) {// 15 every 30 sec
|
||||
temperature_timer = 0;
|
||||
G_need_temperature_check = 1;
|
||||
SI4463_periodic_temperature_check_2();//SI4463_periodic_temperature_check(G_SI4463);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (is_TDMA_master) {
|
||||
if (CONF_radio_state_ON_OFF==1) {LED_connected.write((timer_snapshot >> 19) & 1);}
|
||||
else {LED_connected.write(0);}
|
||||
} else {
|
||||
if (my_client_radio_connexion_state == 2) {
|
||||
LED_connected.write(1);
|
||||
}else{
|
||||
LED_connected.write(0);
|
||||
}
|
||||
}
|
||||
if (is_telnet_active) {
|
||||
|
||||
telnet_counter++;
|
||||
if (telnet_counter>10) {
|
||||
telnet_loop(W5500_p1);
|
||||
telnet_counter = 0;
|
||||
}
|
||||
}
|
||||
serial_term_loop();
|
||||
|
||||
if ( (LAN_conf_applied.DHCP_server_active == 1) && (is_TDMA_master == 0) ) {
|
||||
DHCP_server(LAN_conf_p, W5500_p1);
|
||||
}
|
||||
}
|
||||
}
|
||||
+580
@@ -0,0 +1,580 @@
|
||||
// This file is part of "NPR70 modem firmware" software
|
||||
// (A GMSK data modem for ham radio 430-440MHz, at several hundreds of kbps)
|
||||
// Copyright (c) 2017-2020 Guillaume F. F4HDK (amateur radio callsign)
|
||||
//
|
||||
// "NPR70 modem firmware" is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// "NPR70 modem firmware" is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with "NPR70 modem firmware". If not, see <http://www.gnu.org/licenses/>
|
||||
|
||||
#include "signaling.h"
|
||||
#include "mbed.h"
|
||||
#include "Eth_IPv4.h"
|
||||
#include "global_variables.h"
|
||||
#include "L1L2_radio.h"
|
||||
#include "DHCP_ARP.h"
|
||||
#include "TDMA.h"
|
||||
#include "HMI_telnet.h"
|
||||
|
||||
#include "ext_SRAM2.h"
|
||||
|
||||
static unsigned char rframe_TX[380];
|
||||
static unsigned char TX_signal_frame_raw[260]; //300
|
||||
static int TX_signal_frame_point = 0;
|
||||
|
||||
static int connect_state_machine_counter = 0;
|
||||
static int time_counter_last_ack = 0;
|
||||
|
||||
void signaling_frame_exploitation (unsigned char* unFECdata, int unFECsize, int TA_input) {
|
||||
int data_pos = 2;
|
||||
unsigned char field_type;
|
||||
unsigned char field_length;
|
||||
unsigned char local_ID;
|
||||
unsigned char* local_callsign;
|
||||
unsigned long int local_IP_start;
|
||||
unsigned long int local_IP_size;
|
||||
unsigned char local_static_alloc;
|
||||
unsigned char local_reason;
|
||||
unsigned char local_RSSI;
|
||||
unsigned short int local_BER;
|
||||
short int local_TA;
|
||||
//printf("signaling rx\r\n");
|
||||
do {
|
||||
field_type = unFECdata[data_pos];
|
||||
field_length = unFECdata[data_pos+1];
|
||||
switch (field_type) {
|
||||
case 0x01 : // WHOIS
|
||||
local_ID = unFECdata[data_pos + 2];
|
||||
local_callsign = unFECdata + data_pos + 3;
|
||||
local_callsign[15] = 0;//force null termination
|
||||
local_IP_start = IP_char2int (unFECdata + data_pos + 19);
|
||||
local_IP_size = IP_char2int (unFECdata + data_pos + 23);
|
||||
local_RSSI = unFECdata[data_pos + 27];
|
||||
local_BER = unFECdata[data_pos + 28] + (unFECdata[data_pos + 29] << 8);
|
||||
local_TA = unFECdata[data_pos + 30] + (unFECdata[data_pos + 31] << 8);
|
||||
signaling_whois_interpret (local_ID, local_callsign,
|
||||
local_IP_start, local_IP_size,
|
||||
local_RSSI, local_BER, local_TA);
|
||||
break;
|
||||
case 0x05 : // request new connection
|
||||
local_callsign = unFECdata + data_pos + 2;
|
||||
local_callsign[15] = 0;
|
||||
local_IP_size = IP_char2int (unFECdata + data_pos + 18);
|
||||
local_static_alloc = unFECdata[data_pos + 22];
|
||||
if (is_TDMA_master) {
|
||||
signaling_connect_req_process(local_callsign, local_IP_size, local_static_alloc, TA_input);
|
||||
}
|
||||
break;
|
||||
case 0x06 : // ACK new connection
|
||||
local_callsign = unFECdata + data_pos + 3;
|
||||
local_callsign[15] = 0;
|
||||
if ( (is_TDMA_master == 0) && (strcmp ((char*)local_callsign, CONF_radio_my_callsign) == 0) ) {
|
||||
signaling_connect_ACK_process(unFECdata + data_pos + 2);
|
||||
}
|
||||
break;
|
||||
case 0x07 : // NACK new connection
|
||||
local_callsign = unFECdata + data_pos + 2;
|
||||
local_callsign[15] = 0;
|
||||
local_reason = unFECdata[data_pos + 18];
|
||||
if ( (is_TDMA_master == 0) && (strcmp ((char*)local_callsign, CONF_radio_my_callsign) == 0) ) {
|
||||
signaling_connect_NACK_process(local_reason);
|
||||
}
|
||||
break;
|
||||
case 0x0B : // Request disconnection
|
||||
local_ID = unFECdata[data_pos + 2];
|
||||
local_callsign = unFECdata + data_pos + 3;
|
||||
local_callsign[15] = 0;
|
||||
if (is_TDMA_master) {
|
||||
signaling_disconnect_req_process (local_ID, local_callsign);
|
||||
}
|
||||
break;
|
||||
case 0x0C : // ACK disconnection
|
||||
local_ID = unFECdata[data_pos + 2];
|
||||
local_callsign = unFECdata + data_pos + 3;
|
||||
local_callsign[15] = 0;
|
||||
if ( (is_TDMA_master == 0) && (strcmp ((char*)local_callsign, CONF_radio_my_callsign) == 0) ) {
|
||||
signaling_disconnect_ACK_process (local_ID, local_callsign);
|
||||
}
|
||||
break;
|
||||
}
|
||||
data_pos = data_pos + field_length + 2;
|
||||
|
||||
} while ( (field_type != 0xFF) && (data_pos < unFECsize ) );
|
||||
|
||||
}
|
||||
|
||||
void signaling_whois_interpret(unsigned char loc_ID, unsigned char* loc_callsign,
|
||||
unsigned long int loc_IP_start, unsigned long int loc_IP_size,
|
||||
unsigned char RSSI_loc, unsigned short int BER_loc, short int TA_loc) {
|
||||
unsigned char IP_start_c[5];
|
||||
|
||||
IP_int2char (loc_IP_start, IP_start_c);
|
||||
//printf("WHOIS ID:%i CALL:%s IP_start %i.%i.%i.%i IP_size %i\r\n", loc_ID, (char*)loc_callsign,
|
||||
// IP_start_c[0], IP_start_c[1], IP_start_c[2], IP_start_c[3], loc_IP_size);
|
||||
if (is_TDMA_master == 0) { //only useful for slaves
|
||||
if (loc_ID == 0x7F) { //who entry for master
|
||||
strcpy (CONF_radio_master_callsign, (char*)loc_callsign);
|
||||
}
|
||||
else if (loc_ID < radio_addr_table_size) {
|
||||
CONF_radio_addr_table_date[loc_ID] = GLOBAL_timer.read_us();
|
||||
CONF_radio_addr_table_status[loc_ID] = 2; //
|
||||
strcpy (CONF_radio_addr_table_callsign[loc_ID], (char*)loc_callsign);
|
||||
CONF_radio_addr_table_IP_begin[loc_ID] = loc_IP_start;
|
||||
CONF_radio_addr_table_IP_size[loc_ID] = loc_IP_size;
|
||||
G_radio_addr_table_RSSI[loc_ID] = RSSI_loc;
|
||||
G_radio_addr_table_BER[loc_ID] = BER_loc;
|
||||
TDMA_table_TA[loc_ID] = TA_loc;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
unsigned long int signaling_lookfor_IP_range(unsigned long int req_size) {
|
||||
int i, j;
|
||||
unsigned long int answer = 0xFFFFFFFF;
|
||||
unsigned long int current_tested_pos;
|
||||
unsigned long int next_alloc_IP;
|
||||
|
||||
current_tested_pos = CONF_radio_IP_start;
|
||||
next_alloc_IP = CONF_radio_IP_start + CONF_radio_IP_size;
|
||||
for (j=0; j<radio_addr_table_size; j++) {//looking for next allocated IP
|
||||
if ( (CONF_radio_addr_table_status[j]) && (CONF_radio_addr_table_IP_begin[j] >= current_tested_pos) && (CONF_radio_addr_table_IP_begin[j] < next_alloc_IP) ) {
|
||||
next_alloc_IP = CONF_radio_addr_table_IP_begin[j];
|
||||
}
|
||||
}
|
||||
if ( (next_alloc_IP - current_tested_pos) >= req_size) {
|
||||
answer = current_tested_pos;
|
||||
}
|
||||
|
||||
for (i=0; i<radio_addr_table_size; i++) {
|
||||
if (CONF_radio_addr_table_status[i]) {
|
||||
current_tested_pos = CONF_radio_addr_table_IP_begin[i] + CONF_radio_addr_table_IP_size[i];//beginning = end of previous
|
||||
if (current_tested_pos < answer) { //only continue search if IP tested is below already found
|
||||
next_alloc_IP = CONF_radio_IP_start + CONF_radio_IP_size;
|
||||
for (j=0; j<radio_addr_table_size; j++) {//looking for next allocated IP
|
||||
if ( (CONF_radio_addr_table_status[j]) && (CONF_radio_addr_table_IP_begin[j] >= current_tested_pos) && (CONF_radio_addr_table_IP_begin[j] < next_alloc_IP) ) {
|
||||
next_alloc_IP = CONF_radio_addr_table_IP_begin[j];
|
||||
}
|
||||
}
|
||||
if ( (next_alloc_IP - current_tested_pos) >= req_size) {
|
||||
answer = current_tested_pos;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return answer;
|
||||
}
|
||||
|
||||
void signaling_connect_req_process (unsigned char* client_callsign, unsigned long int req_IP_size, unsigned char req_static_alloc, int TA_input) {
|
||||
int loc_ack = 0;
|
||||
int i;
|
||||
int existing_entry = -1;
|
||||
unsigned char client_ID = 0xFF;
|
||||
static unsigned char raw_answer[60];
|
||||
unsigned char NACK_reason;
|
||||
unsigned long int proposed_IP;
|
||||
unsigned char previous_status;
|
||||
|
||||
// 1) look for existing entry for this callsign
|
||||
for (i=0; i<radio_addr_table_size; i++) {
|
||||
if (strcmp((char*)client_callsign, CONF_radio_addr_table_callsign[i]) == 0) {
|
||||
existing_entry = i;
|
||||
}
|
||||
}
|
||||
//printf ("connect req received\r\n");
|
||||
//printf ("found client entry %i\r\n", existing_entry);
|
||||
if (existing_entry != -1) {
|
||||
previous_status = CONF_radio_addr_table_status[existing_entry];
|
||||
}
|
||||
// 2) logic with 3 cases
|
||||
// 2.1) existing entry matches both callsign and size
|
||||
if ( (existing_entry != -1) && (req_IP_size == CONF_radio_addr_table_IP_size[existing_entry]) ) {
|
||||
client_ID = existing_entry;
|
||||
CONF_radio_addr_table_status[existing_entry] = 1;
|
||||
CONF_radio_addr_table_date[existing_entry] = GLOBAL_timer.read_us();
|
||||
loc_ack = 1; // Ack
|
||||
//printf("existing entry matches\r\n");
|
||||
}
|
||||
// 2.2) existing entry with different size
|
||||
if ( (existing_entry != -1) && (req_IP_size != CONF_radio_addr_table_IP_size[existing_entry]) ) {
|
||||
CONF_radio_addr_table_status[existing_entry] = 0; //frees existing entry
|
||||
proposed_IP = signaling_lookfor_IP_range (req_IP_size);
|
||||
if (proposed_IP != 0xFFFFFFFF) {// IP valid found
|
||||
client_ID = existing_entry;
|
||||
CONF_radio_addr_table_status[client_ID] = 1;
|
||||
CONF_radio_addr_table_IP_begin[client_ID] = proposed_IP;
|
||||
CONF_radio_addr_table_IP_size[client_ID] = req_IP_size;
|
||||
strcpy (CONF_radio_addr_table_callsign[client_ID], (char*)client_callsign);
|
||||
CONF_radio_addr_table_date[client_ID] = GLOBAL_timer.read_us();
|
||||
loc_ack = 1;
|
||||
//printf("existing entry doesnt match, ok new\r\n");
|
||||
} else { //no IP found
|
||||
NACK_reason = 0x02;
|
||||
loc_ack = 0;
|
||||
//printf("existing entry doesnt match, no more IP\r\n");
|
||||
}
|
||||
}
|
||||
if ( (existing_entry != -1) && (previous_status==0) && (loc_ack==1) ) {
|
||||
TDMA_init_TA(client_ID, TA_input);
|
||||
}
|
||||
// 2.3) no previous entry
|
||||
if (existing_entry == -1) {
|
||||
// lookfor empty entry
|
||||
for (i=radio_addr_table_size-1; i>=0; i--) {
|
||||
if (CONF_radio_addr_table_status[i] <= 0) {
|
||||
client_ID = i;
|
||||
//printf("client ID search %i\r\n", client_ID);
|
||||
}
|
||||
}
|
||||
if (client_ID == 0xFF) {
|
||||
NACK_reason = 0x03; //max nb of clients reached
|
||||
loc_ack = 0;
|
||||
} else {
|
||||
proposed_IP = signaling_lookfor_IP_range (req_IP_size);
|
||||
if (proposed_IP != 0xFFFFFFFF) {// IP valid found
|
||||
CONF_radio_addr_table_status[client_ID] = 1;
|
||||
CONF_radio_addr_table_IP_begin[client_ID] = proposed_IP;
|
||||
CONF_radio_addr_table_IP_size[client_ID] = req_IP_size;
|
||||
strcpy (CONF_radio_addr_table_callsign[client_ID], (char*)client_callsign);
|
||||
CONF_radio_addr_table_date[client_ID] = GLOBAL_timer.read_us();
|
||||
TDMA_init_TA(client_ID, TA_input);
|
||||
loc_ack = 1;
|
||||
//printf("new, alloc OK\r\n");
|
||||
} else { //no IP found
|
||||
NACK_reason = 0x02;
|
||||
loc_ack = 0;
|
||||
//printf("new, no more IP\r\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
// 3)send answer to client
|
||||
if (loc_ack == 1) { // ACK
|
||||
raw_answer[0] = 0x06; //signaling type = connection acknowledge
|
||||
raw_answer[1] = 59; //size
|
||||
raw_answer[2] = client_ID;
|
||||
strcpy ((char*)(raw_answer + 3), (char*)client_callsign); // Client Callsign
|
||||
IP_int2char (CONF_radio_addr_table_IP_begin[client_ID], raw_answer + 19); // IP start
|
||||
IP_int2char (CONF_radio_addr_table_IP_size[client_ID], raw_answer + 23); // IP size
|
||||
strcpy ((char*)(raw_answer + 27), CONF_radio_my_callsign); // Master callsign
|
||||
IP_int2char (LAN_conf_applied.LAN_modem_IP, raw_answer + 43); // Modem IP
|
||||
IP_int2char (LAN_conf_applied.LAN_subnet_mask, raw_answer + 47); // IP subnet mask
|
||||
raw_answer[51] = LAN_conf_applied.LAN_def_route_activ; // active default route
|
||||
IP_int2char (LAN_conf_applied.LAN_def_route, raw_answer + 52); // Default Route value
|
||||
raw_answer[56] = LAN_conf_applied.LAN_DNS_activ; // Active DNS
|
||||
IP_int2char (LAN_conf_applied.LAN_DNS_value, raw_answer + 57); // DNS value
|
||||
signaling_TX_add_entry (raw_answer, 61);
|
||||
signaling_frame_push();
|
||||
//printf("\r\n ACK sent\r\n\r\n");
|
||||
}
|
||||
else { // NACK
|
||||
raw_answer[0] = 0x07; //signaling type = connection NACK
|
||||
raw_answer[1] = 33; //size
|
||||
strcpy ((char*)(raw_answer + 2), (char*)client_callsign);
|
||||
raw_answer[18] = NACK_reason;
|
||||
strcpy ((char*)(raw_answer + 19), CONF_radio_my_callsign); // Master callsign;
|
||||
signaling_TX_add_entry (raw_answer, 35);
|
||||
signaling_frame_push();
|
||||
//printf("\r\n NACK sent\r\n\r\n");
|
||||
}
|
||||
}
|
||||
|
||||
void signaling_connect_ACK_process(unsigned char* raw_data)
|
||||
{
|
||||
unsigned char local_client_ID;
|
||||
unsigned long int local_IP_start;
|
||||
unsigned long int local_IP_size;
|
||||
unsigned long int local_modem_IP;
|
||||
unsigned long int local_IP_subnet;
|
||||
unsigned char local_default_route_activ;
|
||||
unsigned long int local_default_route;
|
||||
unsigned char local_DNS_activ;
|
||||
unsigned long int local_DNS_value;
|
||||
|
||||
int need_LAN_reset = 0;
|
||||
//Client ID
|
||||
local_client_ID = raw_data[0];
|
||||
my_radio_client_ID = local_client_ID;
|
||||
TDMA_NULL_frame_init(70);
|
||||
// IP Start
|
||||
local_IP_start = IP_char2int(raw_data + 17);
|
||||
if (local_IP_start != LAN_conf_applied.DHCP_range_start) {need_LAN_reset = 1;}
|
||||
LAN_conf_applied.DHCP_range_start = local_IP_start;
|
||||
// IP Size
|
||||
local_IP_size = IP_char2int(raw_data + 21);
|
||||
if (local_IP_size != LAN_conf_applied.DHCP_range_size) {need_LAN_reset = 1;}
|
||||
LAN_conf_applied.DHCP_range_size = local_IP_size;
|
||||
// Master Callsign
|
||||
strcpy(CONF_radio_master_callsign, (char*)(raw_data + 25));
|
||||
// Modem IP
|
||||
local_modem_IP = IP_char2int(raw_data + 41);
|
||||
if (local_modem_IP != LAN_conf_applied.LAN_modem_IP) {need_LAN_reset = 1;}
|
||||
LAN_conf_applied.LAN_modem_IP = local_modem_IP;
|
||||
// IP subnet mask
|
||||
local_IP_subnet = IP_char2int(raw_data + 45);
|
||||
if (local_IP_subnet != LAN_conf_applied.LAN_subnet_mask) {need_LAN_reset = 1;}
|
||||
LAN_conf_applied.LAN_subnet_mask = local_IP_subnet;
|
||||
// Default route active
|
||||
local_default_route_activ = raw_data[49];
|
||||
if (local_default_route_activ != LAN_conf_applied.LAN_def_route_activ) {need_LAN_reset = 1;}
|
||||
LAN_conf_applied.LAN_def_route_activ = local_default_route_activ;
|
||||
// Default route value
|
||||
local_default_route = IP_char2int(raw_data + 50);
|
||||
if (local_default_route != LAN_conf_applied.LAN_def_route) {need_LAN_reset = 1;}
|
||||
LAN_conf_applied.LAN_def_route = local_default_route;
|
||||
// DNS active
|
||||
local_DNS_activ = raw_data[54];
|
||||
if (local_DNS_activ != LAN_conf_applied.LAN_DNS_activ) {need_LAN_reset = 1;}
|
||||
LAN_conf_applied.LAN_DNS_activ = local_DNS_activ;
|
||||
// DNS value
|
||||
local_DNS_value = IP_char2int(raw_data + 55);
|
||||
if (local_DNS_value != LAN_conf_applied.LAN_DNS_value) {need_LAN_reset = 1;}
|
||||
LAN_conf_applied.LAN_DNS_value = local_DNS_value;
|
||||
|
||||
if (need_LAN_reset) {
|
||||
HMI_force_exit();
|
||||
reset_DHCP_table(&LAN_conf_applied);
|
||||
W5500_re_configure();
|
||||
need_LAN_reset = 0;
|
||||
}
|
||||
my_client_radio_connexion_state = 2;
|
||||
connect_state_machine_counter = 0;
|
||||
time_counter_last_ack = 0;
|
||||
//printf("\r\n REQ ACK Received\r\n\r\n");
|
||||
}
|
||||
|
||||
void signaling_connect_NACK_process (unsigned char reason_loc) {
|
||||
//printf("NACK reason: %i\r\n", reason_loc);
|
||||
G_connect_rejection_reason = reason_loc;
|
||||
my_client_radio_connexion_state = 3;
|
||||
connect_state_machine_counter = 0;
|
||||
}
|
||||
|
||||
static unsigned char loc_data[40];
|
||||
|
||||
void signaling_connect_req_TX(void) {
|
||||
//static unsigned char loc_data[30];
|
||||
loc_data[0] = 0x05; // signaling type = connection request
|
||||
loc_data[1] = 21; // field size
|
||||
strcpy ((char*)(loc_data+2), CONF_radio_my_callsign); // callsign
|
||||
IP_int2char (CONF_radio_IP_size_requested, loc_data + 18);
|
||||
loc_data[22] = CONF_radio_static_IP_requested;
|
||||
signaling_TX_add_entry (loc_data, 23);
|
||||
signaling_frame_push();
|
||||
//printf ("\r\nNEW REQUEST TX\r\n\r\n");
|
||||
}
|
||||
|
||||
void signaling_disconnect_req_process (unsigned loc_ID, unsigned char* loc_callsign) {
|
||||
int i;
|
||||
int existing_entry = -1;
|
||||
for (i=0; i<radio_addr_table_size; i++) {
|
||||
if (strcmp((char*)loc_callsign, CONF_radio_addr_table_callsign[i]) == 0) {
|
||||
existing_entry = i;
|
||||
}
|
||||
}
|
||||
if (existing_entry != -1) {
|
||||
CONF_radio_addr_table_status[existing_entry] = 0;
|
||||
}
|
||||
signaling_disconnect_ACK_TX(loc_ID, loc_callsign);
|
||||
signaling_disconnect_ACK_TX(loc_ID, loc_callsign);//sends 2 times
|
||||
}
|
||||
|
||||
void signaling_disconnect_ACK_process (unsigned loc_ID, unsigned char* loc_callsign) {
|
||||
my_client_radio_connexion_state = 5;
|
||||
my_radio_client_ID = 0x7E;
|
||||
TDMA_NULL_frame_init(70);
|
||||
}
|
||||
|
||||
void signaling_disconnect_req_TX (void) {
|
||||
//static unsigned char loc_data[30]; // moved global
|
||||
loc_data[0] = 0x0B; // signaling type = disconnect ACK
|
||||
loc_data[1] = 17; // field size
|
||||
loc_data[2] = my_radio_client_ID;
|
||||
strcpy ((char*)(loc_data+3), CONF_radio_my_callsign);
|
||||
signaling_TX_add_entry (loc_data, 19);
|
||||
signaling_frame_push();
|
||||
}
|
||||
|
||||
void signaling_disconnect_ACK_TX (unsigned loc_ID, unsigned char* loc_callsign) {
|
||||
//static unsigned char loc_data[30]; // moved global
|
||||
loc_data[0] = 0x0C; // signaling type = disconnect ACK
|
||||
loc_data[1] = 17; // field size
|
||||
loc_data[2] = loc_ID;
|
||||
strcpy ((char*)(loc_data+3), (char*)loc_callsign);
|
||||
signaling_TX_add_entry (loc_data, 19);
|
||||
signaling_frame_push();
|
||||
}
|
||||
|
||||
// TX part
|
||||
//void signaling_frame_init(unsigned char* TX_signal_frame_raw) {
|
||||
void signaling_frame_init(void) {
|
||||
if (is_TDMA_master) {
|
||||
TX_signal_frame_raw[0] = 0xFF; //broadcast address (plus parity bit)
|
||||
} else {
|
||||
TX_signal_frame_raw[0] = my_radio_client_ID + parity_bit_elab[(my_radio_client_ID & 0x7F)]; //addr slave
|
||||
}
|
||||
TX_signal_frame_raw[1] = 0x1E; // protocol = signaling
|
||||
TX_signal_frame_point = 2;
|
||||
}
|
||||
|
||||
//void signaling_single_whois_TX(unsigned char* TX_signal_frame_raw, unsigned char loc_ID, char* loc_callsign,
|
||||
void signaling_single_whois_TX(unsigned char loc_ID, char* loc_callsign,
|
||||
unsigned long int loc_IP_start, unsigned long int loc_IP_size,
|
||||
unsigned char RSSI_loc, unsigned short int BER_loc, short int TA_loc) {
|
||||
loc_data[0] = 0x01; //field type = who
|
||||
loc_data[1] = 30; // field length previous 30
|
||||
loc_data[2] = loc_ID;
|
||||
|
||||
strcpy ((char*)(loc_data+3), loc_callsign);
|
||||
loc_data[18] = 0; //null termination of callsign
|
||||
IP_int2char (loc_IP_start, loc_data + 19); // IP start
|
||||
IP_int2char (loc_IP_size, loc_data + 23); // IP start
|
||||
loc_data[27] = RSSI_loc; // RSSI uplink
|
||||
loc_data[28] = BER_loc & 0xFF; // error rate uplink (lsB first)
|
||||
loc_data[29] = (BER_loc & 0xFF00) >> 8;
|
||||
loc_data[30] = TA_loc & 0xFF;
|
||||
loc_data[31] = (TA_loc & 0xFF00) >> 8;
|
||||
signaling_TX_add_entry (loc_data, 32); //previous 27
|
||||
}
|
||||
|
||||
//void signaling_whois_TX(unsigned char* TX_signal_frame_raw) {
|
||||
void signaling_whois_TX(void) {
|
||||
int i;
|
||||
unsigned int RSSI_loc;
|
||||
if (is_TDMA_master) {
|
||||
signaling_single_whois_TX (0x7F, CONF_radio_my_callsign, LAN_conf_applied.LAN_modem_IP, 0, 0, 0, 0); // master entry
|
||||
for (i=0; i<radio_addr_table_size; i++) { // client entries
|
||||
if (CONF_radio_addr_table_status[i]) {
|
||||
RSSI_loc = (G_radio_addr_table_RSSI[i] & 0xFF00) >> 8;
|
||||
signaling_single_whois_TX (i, CONF_radio_addr_table_callsign[i],
|
||||
CONF_radio_addr_table_IP_begin[i], CONF_radio_addr_table_IP_size[i],
|
||||
RSSI_loc, G_radio_addr_table_BER[i], (short int)(TDMA_table_TA[i] / 10) );
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else if (my_client_radio_connexion_state == 2) { //Slave, only sends if really connected
|
||||
signaling_single_whois_TX (my_radio_client_ID, CONF_radio_my_callsign, LAN_conf_applied.DHCP_range_start, LAN_conf_applied.DHCP_range_size, G_downlink_RSSI, G_downlink_BER, 0); // client's own entry
|
||||
signaling_single_whois_TX (0x7F, CONF_radio_master_callsign, LAN_conf_applied.LAN_modem_IP, 0, 0, 0, 0); //MASTER entry
|
||||
}
|
||||
}
|
||||
|
||||
void signaling_TX_add_entry(unsigned char* raw_data, int size) {
|
||||
if (TX_signal_frame_point == 0) {
|
||||
signaling_frame_init();
|
||||
}
|
||||
if ( (TX_signal_frame_point + size) < 248) { //enough space for this entry in current frame
|
||||
memcpy ((TX_signal_frame_raw + TX_signal_frame_point), raw_data, size);
|
||||
TX_signal_frame_point = TX_signal_frame_point + size;
|
||||
} else { // not enough space
|
||||
signaling_frame_push(); // send previous entries
|
||||
signaling_frame_init(); // initialize new frame
|
||||
memcpy ((TX_signal_frame_raw + TX_signal_frame_point), raw_data, size);
|
||||
TX_signal_frame_point = TX_signal_frame_point + size;
|
||||
}
|
||||
}
|
||||
|
||||
//void signaling_frame_push(unsigned char* TX_signal_frame_raw) {
|
||||
void signaling_frame_push(void) {
|
||||
//int rsize_needed;
|
||||
int size_w_FEC;
|
||||
int size_wo_FEC;
|
||||
unsigned char rframe_length;
|
||||
unsigned int timer_snapshot;
|
||||
|
||||
TX_signal_frame_raw[TX_signal_frame_point] = 0xFF; // END flag
|
||||
TX_signal_frame_raw[TX_signal_frame_point + 1] = 0x00; // size 0
|
||||
TX_signal_frame_point = TX_signal_frame_point + 2;
|
||||
size_wo_FEC = TX_signal_frame_point;
|
||||
if (size_wo_FEC < 69) {
|
||||
size_wo_FEC = 69;
|
||||
}
|
||||
//rsize_needed = 100 + (size_wo_FEC * 1.4);
|
||||
|
||||
//printf("sig NO ext SRAM\r\n");
|
||||
//if ((TXPS_FIFO->last_ready - TXPS_FIFO->RD_point) < (TXPS_FIFO_threshold_sig - rsize_needed) ) { //16380
|
||||
if (TX_FIFO_full_global(0) == 0) {
|
||||
timer_snapshot = GLOBAL_timer.read_us();
|
||||
//TXPS_FIFO->data[TXPS_FIFO->WR_point & TXPS_FIFO->mask] = (timer_snapshot >> 16) & 0xFF; //timer
|
||||
rframe_TX[0] = (timer_snapshot >> 16) & 0xFF;
|
||||
//TXPS_FIFO->WR_point++;
|
||||
size_w_FEC = size_w_FEC_compute (size_wo_FEC);
|
||||
|
||||
rframe_length = size_w_FEC + 1 - SI4463_offset_size;
|
||||
//if (rframe_length < 0) {rframe_length = 0;}
|
||||
//TXPS_FIFO->data[TXPS_FIFO->WR_point & TXPS_FIFO->mask] = rframe_length;
|
||||
//TXPS_FIFO->WR_point++;
|
||||
rframe_TX[1] = rframe_length;
|
||||
//TXPS_FIFO->data[TXPS_FIFO->WR_point & TXPS_FIFO->mask] = 0x00; //TDMA byte
|
||||
//TXPS_FIFO->WR_point++;
|
||||
rframe_TX[2] = 0x00; //TDMA byte
|
||||
//size_w_FEC = FEC_encode(TX_signal_frame_raw, TXPS_FIFO, size_wo_FEC);
|
||||
size_w_FEC = FEC_encode2(TX_signal_frame_raw, rframe_TX+3, size_wo_FEC);
|
||||
//TX_intern_FIFO_write(rframe_TX, size_w_FEC+3);
|
||||
TX_FIFO_write_global(rframe_TX, size_w_FEC+3);
|
||||
//TXPS_FIFO->last_ready = TXPS_FIFO->WR_point;
|
||||
}
|
||||
TX_signal_frame_point = 0;
|
||||
}
|
||||
|
||||
void signaling_periodic_call() { // called every 2 to 6 seconds
|
||||
int i;
|
||||
unsigned int time_since_last_ack;
|
||||
unsigned int timer_snapshot;
|
||||
// CLIENT STATE MACHINE
|
||||
if (is_TDMA_master == 0) {
|
||||
if ( (my_client_radio_connexion_state==1) && (connect_state_machine_counter>2) ) {//waiting for connexion
|
||||
signaling_connect_req_TX();
|
||||
connect_state_machine_counter = 0;
|
||||
timer_snapshot = GLOBAL_timer.read_us();
|
||||
if ( (timer_snapshot - last_rframe_seen) > CONF_radio_timeout_small) {
|
||||
SI4463_prepa_TX_1_call.attach_us(&SI4463_prepa_TX_1, 500000);
|
||||
}
|
||||
}
|
||||
if ( (my_client_radio_connexion_state==2) && (connect_state_machine_counter>5) ) {//already connected periodic update
|
||||
signaling_connect_req_TX();
|
||||
// no counter reset, the ack reception does it
|
||||
}
|
||||
if ( (my_client_radio_connexion_state==3) && (connect_state_machine_counter>15) ) {//rejected, new attempt every 15
|
||||
signaling_connect_req_TX();
|
||||
connect_state_machine_counter = 0;
|
||||
}
|
||||
if ( (my_client_radio_connexion_state==2) && (time_counter_last_ack > connexion_timeout) ) {//timeout, no ACK received for long time
|
||||
// transition to state 1 "waiting for connection"
|
||||
my_client_radio_connexion_state = 1;
|
||||
radio_flush_TX_FIFO();
|
||||
my_radio_client_ID = 0x7E;
|
||||
TDMA_NULL_frame_init(70);
|
||||
}
|
||||
if ( (my_client_radio_connexion_state==4) && (connect_state_machine_counter>2) ) {//waiting for disconnection
|
||||
signaling_disconnect_req_TX();
|
||||
connect_state_machine_counter = 0;
|
||||
}
|
||||
connect_state_machine_counter++;
|
||||
time_counter_last_ack++;
|
||||
}
|
||||
|
||||
// MASTER : timeout management for clients
|
||||
if (is_TDMA_master) {
|
||||
timer_snapshot = GLOBAL_timer.read_us();
|
||||
for (i=0; i< radio_addr_table_size; i++) {
|
||||
time_since_last_ack = timer_snapshot - CONF_radio_addr_table_date[i];
|
||||
if ( (CONF_radio_addr_table_status[i] == 1) && (time_since_last_ack >> (2000000*connexion_timeout*CONF_signaling_period)) ) {
|
||||
CONF_radio_addr_table_status[i] = 0; // force disconnect
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
signaling_whois_TX();
|
||||
if (TX_signal_frame_point >0) {
|
||||
signaling_frame_push();
|
||||
|
||||
}
|
||||
}
|
||||
+63
@@ -0,0 +1,63 @@
|
||||
// This file is part of "NPR70 modem firmware" software
|
||||
// (A GMSK data modem for ham radio 430-440MHz, at several hundreds of kbps)
|
||||
// Copyright (c) 2017-2020 Guillaume F. F4HDK (amateur radio callsign)
|
||||
//
|
||||
// "NPR70 modem firmware" is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// "NPR70 modem firmware" is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with "NPR70 modem firmware". If not, see <http://www.gnu.org/licenses/>
|
||||
|
||||
#ifndef SIGNALING_F4
|
||||
#define SIGNALING_F4
|
||||
|
||||
#include "mbed.h"
|
||||
#define connexion_timeout 10
|
||||
//multiple of signaling_period 10sec or 20sec or 30sec
|
||||
|
||||
void signaling_frame_exploitation (unsigned char* unFECdata, int unFECsize, int TA_input);
|
||||
|
||||
void signaling_whois_interpret(unsigned char loc_ID, unsigned char* loc_callsign,
|
||||
unsigned long int loc_IP_start, unsigned long int loc_IP_size,
|
||||
unsigned char RSSI_loc, unsigned short int BER_loc, short int TA_loc);
|
||||
|
||||
void signaling_print_who(void);
|
||||
|
||||
unsigned long int signaling_lookfor_IP_range(unsigned long int req_size);
|
||||
|
||||
void signaling_connect_req_process (unsigned char* client_callsign, unsigned long int req_IP_size, unsigned char req_static_alloc, int TA_input);
|
||||
|
||||
void signaling_connect_ACK_process(unsigned char* raw_data);
|
||||
|
||||
void signaling_connect_NACK_process (unsigned char reason_loc);
|
||||
|
||||
void signaling_connect_req_TX(void);
|
||||
|
||||
void signaling_disconnect_req_process (unsigned loc_ID, unsigned char* loc_callsign);
|
||||
|
||||
void signaling_disconnect_ACK_process (unsigned loc_ID, unsigned char* loc_callsign);
|
||||
|
||||
void signaling_disconnect_ACK_TX (unsigned loc_ID, unsigned char* loc_callsign);
|
||||
|
||||
void signaling_frame_init();
|
||||
|
||||
void signaling_single_whois_TX(unsigned char loc_ID, char* loc_callsign,
|
||||
unsigned long int loc_IP_start, unsigned long int loc_IP_size,
|
||||
unsigned char RSSI_loc, unsigned short int BER_loc, short int TA_loc);
|
||||
|
||||
void signaling_TX_add_entry(unsigned char* raw_data, int size);
|
||||
|
||||
void signaling_whois_TX();
|
||||
|
||||
void signaling_frame_push();
|
||||
|
||||
void signaling_periodic_call();
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user