CHDK_DE Vorschauversion  Trunk Rev. 5163
 Alle Datenstrukturen Dateien Funktionen Variablen Typdefinitionen Aufzählungen Aufzählungswerte Makrodefinitionen
check_compat.c-Dateireferenz
#include "compat_table.h"
#include "bin_compat.h"
+ Include-Abhängigkeitsdiagramm für check_compat.c:
+ Dieser Graph zeigt, welche Datei direkt oder indirekt diese Datei enthält:

gehe zum Quellcode dieser Datei

Datenstrukturen

struct  pid_sig_t
 
struct  ver_sig_t
 
struct  pid_led_t
 

Makrodefinitionen

#define LEDCNTRL_UNK   0
 
#define LEDCNTRL_OLD   1
 
#define LEDCNTRL_NEW1   2
 
#define LEDCNTRL_NEW2   3
 
#define LEDCNTRL_NEW3   4
 
#define NEED_ENCODED_DISKBOOT   0
 
#define DEBUG_DELAY   10000000
 

Funktionen

void set_led (int led, int state, int method)
 
unsigned short get_pid (void)
 
void blink (unsigned short cam_pid)
 
int ver_cmp (const char *my_ver, const char *fw_ver)
 
unsigned short check_pid (void)
 
void check_compat (void)
 
void core_copy (const long *src, long *dst, long length)
 

Variablen

pid_led_t pid_leds []
 
const int num_pid_sigs = sizeof(pid_sigs)/sizeof(pid_sig_t)
 
const int num_ver_sigs = sizeof(ver_sigs)/sizeof(ver_sig_t)
 
const int led_addresses = sizeof(pid_leds)/sizeof(pid_led_t)
 

Makro-Dokumentation

#define DEBUG_DELAY   10000000

Definiert in Zeile 48 der Datei check_compat.c.

#define LEDCNTRL_NEW1   2

Definiert in Zeile 30 der Datei check_compat.c.

#define LEDCNTRL_NEW2   3

Definiert in Zeile 31 der Datei check_compat.c.

#define LEDCNTRL_NEW3   4

Definiert in Zeile 32 der Datei check_compat.c.

#define LEDCNTRL_OLD   1

Definiert in Zeile 29 der Datei check_compat.c.

#define LEDCNTRL_UNK   0

Definiert in Zeile 28 der Datei check_compat.c.

#define NEED_ENCODED_DISKBOOT   0

Definiert in Zeile 35 der Datei check_compat.c.

Dokumentation der Funktionen

void blink ( unsigned short  cam_pid)

Definiert in Zeile 87 der Datei check_compat.c.

87  {
88  unsigned int led = 0;
89  int method = LEDCNTRL_UNK;
90  int i;
91  // check if there's a known LED
92  for(i=0;i<led_addresses;i++) {
93  if(cam_pid == pid_leds[i].pid) {
94  led = pid_leds[i].led;
95  method = pid_leds[i].method;
96  break;
97  }
98  }
99  // no known LED, no blink
100  if (!led)
101  while(1);
102  // LED found, blink (control method chosen according to the type of GPIO)
103  while(1) {
104  set_led(led, 1, method);
105  for(i=0;i<DEBUG_DELAY;i++) {
106  asm("nop\n nop\n");
107  };
108  set_led(led, 0, method);
109  for(i=0;i<DEBUG_DELAY;i++) {
110  asm("nop\n nop\n");
111  };
112  }
113 }
void check_compat ( void  )

Definiert in Zeile 140 der Datei check_compat.c.

140  {
141 #ifndef OPT_DISABLE_COMPAT_CHECK
142  int i;
143  unsigned short cam_pid;
144  cam_pid = check_pid();
145  for(i=0;i<num_ver_sigs;i++) {
146  if(ver_cmp(ver_sigs[i].str,ver_sigs[i].fw_str)) {
147  return;
148  }
149  }
150  blink(cam_pid);
151 #endif
152 }
unsigned short check_pid ( void  )

Definiert in Zeile 123 der Datei check_compat.c.

123  {
124  int i;
125  // skip check if pid information not available
126  if (num_pid_sigs == 0)
127  return 0;
128  for(i=0;i<num_pid_sigs;i++) {
129  if(*pid_sigs[i].fw_pid == pid_sigs[i].pid) {
130  return pid_sigs[i].pid;
131  }
132  }
133  i = get_pid();
134  blink(i);
135  return 0; // to make the compiler happy
136 }
void core_copy ( const long *  src,
long *  dst,
long  length 
)

Definiert in Zeile 154 der Datei check_compat.c.

154  {
155  if (src < dst && dst < src + length) {
156  /* Have to copy backwards */
157  src += length;
158  dst += length;
159  while (length--) *--dst = *--src;
160  }
161  else
162  while (length--) *dst++ = *src++;
163 }
unsigned short get_pid ( void  )

Definiert in Zeile 75 der Datei check_compat.c.

75  {
76  int i;
77  for(i=0;i<led_addresses;i++) {
78  if( (*(unsigned short*)pid_leds[i].addr >= pid_leds[0].pid) &&
79  (*(unsigned short*)pid_leds[i].addr <= pid_leds[led_addresses-1].pid) ) {
80  // return the first possible number which looks like a valid P-ID
81  return *(unsigned short*)pid_leds[i].addr;
82  }
83  }
84  return 0;
85 }
void set_led ( int  led,
int  state,
int  method 
)

Definiert in Zeile 51 der Datei check_compat.c.

51  {
52  volatile long *p = (void*)led;
53 
54  if (method == LEDCNTRL_NEW1) {
55  // DIGIC 5
56  *p = (*p & 0xFFFFFFCF) | ((state) ? 0x00 : 0x20);
57  }
58  else if (method == LEDCNTRL_NEW2) {
59  // DIGIC 4+, 5
60  *p = ((state) ? 0x93d800 : 0x83dc00);
61  }
62  else if (method == LEDCNTRL_NEW3) {
63  // DIGIC 6
64  *p = ((state) ? 0x4d0002 : 0x4c0003);
65  }
66  else if (method == LEDCNTRL_OLD) {
67  *p = ((state) ? 0x46 : 0x44);
68  }
69 }
int ver_cmp ( const char *  my_ver,
const char *  fw_ver 
)

Definiert in Zeile 116 der Datei check_compat.c.

116  {
117  int i=0;
118  while(my_ver[i] == fw_ver[i] && my_ver[i] != 0)
119  i++;
120  return my_ver[i] == 0; // hit the null in our string
121 }

Variablen-Dokumentation

const int led_addresses = sizeof(pid_leds)/sizeof(pid_led_t)

Definiert in Zeile 73 der Datei check_compat.c.

const int num_pid_sigs = sizeof(pid_sigs)/sizeof(pid_sig_t)

Definiert in Zeile 71 der Datei check_compat.c.

const int num_ver_sigs = sizeof(ver_sigs)/sizeof(ver_sig_t)

Definiert in Zeile 72 der Datei check_compat.c.

pid_led_t pid_leds[]

Definiert in Zeile 39 der Datei check_compat.c.