CHDK_DE Vorschauversion  Trunk Rev. 6014
 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 LEDCNTRL_NEW4   5
 
#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 49 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_NEW4   5

Definiert in Zeile 33 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 36 der Datei check_compat.c.

Dokumentation der Funktionen

void blink ( unsigned short  cam_pid)

Definiert in Zeile 92 der Datei check_compat.c.

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

Definiert in Zeile 145 der Datei check_compat.c.

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

Definiert in Zeile 128 der Datei check_compat.c.

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

Definiert in Zeile 159 der Datei check_compat.c.

159  {
160  if (src < dst && dst < src + length) {
161  /* Have to copy backwards */
162  src += length;
163  dst += length;
164  while (length--) *--dst = *--src;
165  }
166  else
167  while (length--) *dst++ = *src++;
168 }
unsigned short get_pid ( void  )

Definiert in Zeile 80 der Datei check_compat.c.

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

Definiert in Zeile 52 der Datei check_compat.c.

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

Definiert in Zeile 121 der Datei check_compat.c.

121  {
122  int i=0;
123  while(my_ver[i] == fw_ver[i] && my_ver[i] != 0)
124  i++;
125  return my_ver[i] == 0; // hit the null in our string
126 }

Variablen-Dokumentation

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

Definiert in Zeile 78 der Datei check_compat.c.

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

Definiert in Zeile 76 der Datei check_compat.c.

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

Definiert in Zeile 77 der Datei check_compat.c.

pid_led_t pid_leds[]

Definiert in Zeile 40 der Datei check_compat.c.