Dana
2025-11-30 efda44a3808207db37921cf9237a8b7656352486
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
#ifndef __SONIXCAMERA_H__
#define __SONIXCAMERA_H__
#include "util.h"
 
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    库初始化
//在调用库的接口函数之前,需要首先调用SonixCam_Init函数,只有该函数返回成功后,才可以调用其它接口函数
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:        SonixCam_Init
*    Description:    库的初始化
*    Parameters:        videoIndex:/dev/videoX目录下的设备视频设备文件X索引号
*    Return :        成功返回    true
*/
 
bool  SonixCam_Init(int videoIndex);
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:        SonixCam_UnInit
*    Description:        
*    Parameters:    
*    Return :        成功返回 true
*/
bool  SonixCam_UnInit();
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    重启设备
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:        SonixCam_RestartDevice
*    Description:        
*    Parameters:
*    Return :        成功返回    true
*/
bool  SonixCam_RestartDevice();
 
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    Dsp寄存器读
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:        SonixCam_AsicRegisterRead
*    Description:
*    Parameters:        addr:dsp寄存器地址,pData读取数据缓存,len:要读取的数据字节数。
*    Return :        成功返回    true
*/
bool  SonixCam_AsicRegisterRead(unsigned short addr, unsigned char pData[], long len);
 
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    Dsp寄存器写
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:        SonixCam_AsicRegisterWrite
*    Description:
*    Parameters:        addr:dsp寄存器地址,pData:写数据缓存,len:要写的数据字节数。
*    Return :        成功返回    true
*/
bool  SonixCam_AsicRegisterWrite(unsigned short addr, unsigned char pData[], long len);
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    获得FLASH的类型
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:        SonixCam_GetSerialFlashType
*    Description:
*    Parameters:        sft:成功返回flash的类型,check:设为true,在flash读取flash类型
*    Return :            成功返回    true
*/
bool SonixCam_GetSerialFlashType(SERIAL_FLASH_TYPE *sft, bool check);
 
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    获得FW Code版本号
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:        SonixCam_GetFWVersion
*    Description:
*    Parameters:        pData:FW Code版本号缓存数组指针,len:缓存数组最大字节数,bNormalExport:为true以默认方式排列版本号字符串,为FALSH,以第二种方式排列版本号字符串, 和原始固件名相同。
*    Return :        成功返回    true
*/
bool  SonixCam_GetFwVersion(unsigned char pData[], long len, BOOL bNormalExport);
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    从固件文件缓存中获得FW Code版本号
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:        SonixCam_GetFWVersion
*    Description:
*    Parameters:        pFwFile:无符号字符固件缓存指针,pData:FW Code版本号缓存数组指针,len:缓存数组最大字节数,bNormalExport:为true以默认方式排列版本号字符串,为FALSH,以第二种方式排列版本号字符串, 和原始固件名相同。
*    Return :        成功返回    true
*/
bool  SonixCam_GetFwVersionFromFile(unsigned char pFwFile[], unsigned char pData[], long len, BOOL bNormalExport);
 
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    获得FW Code版本号, 如果是271设备,则需要调用该函数获得FW版本号
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:        SonixCam_GetFWVersion
*    Description:
*    Parameters:        romType: DSP的ROM大小, pData:FW Code版本号缓存数组指针,len:缓存数组最大字节数,bNormalExport:为true以默认方式排列版本号字符串,为FALSH,以第二种方式排列版本号字符串, 和原始固件名相同。
*    Return :        成功返回    true
*/
bool  SonixCam_GetFwVersionEx(DSP_ROM_TYPE romType, unsigned char pData[], long len, BOOL bNormalExport);
 
// XU read
bool SonixCam_XuRead(unsigned char pData[], unsigned int length,  BYTE unitID, BYTE cs);
// XU write
bool SonixCam_XuWrite(unsigned char pData[], unsigned int length,  BYTE unitID, BYTE cs);
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    I2C读
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:        SonixCam_SensorRegisterCustomRead
*    Description:
*    Parameters:        slaveId:I2c子设备ID,addr:要读的地址,addrByteNumber: 地址字节数,最大2字节, pData:读数据缓存, dataByteNumber:要读的数据字节数,最大2字节, pollSCL:SCL 拉高
*    Return :            成功返回    true
*/
bool  SonixCam_SensorRegisterCustomRead(unsigned char slaveId, unsigned short  addr, unsigned short  addrByteNumber, unsigned char pData[], long dataByteNumber, bool pollSCL); //bool pollSCL = false
 
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    I2C写
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:        SonixCam_SensorRegisterCustomWrite
*    Description:
*    Parameters:        slaveId:I2c子设备ID,addr:要写的地址,addrByteNumber: 地址字节数,最大2字节, pData:写数据缓存, dataByteNumber:要写的数据字节数,最大2字节, pollSCL:SCL 拉高
*    Return :            成功返回    true
*/
bool  SonixCam_SensorRegisterCustomWrite(unsigned char slaveId, unsigned short addr, unsigned short  addrByteNumber, unsigned char pData[], long dataByteNumber, bool pollSCL);
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    第二组I2C读
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:        SonixCam_SensorTwoRegisterCustomRead
*    Description:
*    Parameters:        slaveId:I2c子设备ID,addr:要读的地址,addrByteNumber: 地址字节数,最大2字节, pData:读数据缓存, dataByteNumber:要读的数据字节数,最大2字节, pollSCL:SCL 拉高
*    Return :            成功返回    true
*/
bool  SonixCam_SensorTwoRegisterCustomRead(unsigned char slaveId, unsigned short  addr, unsigned short  addrByteNumber, unsigned char pData[], long dataByteNumber, bool pollSCL); //bool pollSCL = false
 
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    第二组I2C写
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:        SonixCam_SensorTwoRegisterCustomWrite
*    Description:
*    Parameters:        slaveId:I2c子设备ID,addr:要写的地址,addrByteNumber: 地址字节数,最大2字节, pData:写数据缓存, dataByteNumber:要写的数据字节数,最大2字节, pollSCL:SCL 拉高
*    Return :            成功返回    true
*/
bool  SonixCam_SensorTwoRegisterCustomWrite(unsigned char slaveId, unsigned short addr, unsigned short  addrByteNumber, unsigned char pData[], long dataByteNumber, bool pollSCL);
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    FLASH读,如果获得的DSP_ROM_TYPE是DRT_64K,则可以读取Flash的范围是0-64K, 否则如果DSP_ROM_TYPE是DRT_128K, 读取范围是0-128K
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:        SonixCam_SerialFlashRead
*    Description:    
*    Parameters:        addr:要写的地址,pData:写缓存, len:写数据长度
*    Return :        成功返回    true
*/
bool SonixCam_SerialFlashRead(long addr, unsigned char pData[], long len);
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    FLASH写,写地址最大范围是0-256k空间,不要在开图的情况下调用该函数。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:        SonixCam_SerialFlashSectorWrite
*    Description:    先关闭FLASH的写保护,并擦除参数addr地址所在的Flash的扇区,然后写入数据。
*    Parameters:        addr:写的地址,pData:写缓存, len:写数据长度,sft: FLASH的类型
*    Return :        成功返回    true
*/
bool SonixCam_SerialFlashSectorWrite(long addr, unsigned char pData[], long len, SERIAL_FLASH_TYPE sft);
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    FLASH写
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:        SonixCam_SerialFlashWrite
*    Description:    与SonixCam_SerialFlashSectorWrite的区别是它不擦除addr地址所在的扇区,需要确保调用该函数之前
*                    已经关闭Flash的写保护并且addr地址要写的区域已经擦除。
*    Parameters:        addr:写的地址,pData:写缓存, len:写数据长度,sft: FLASH的类型
*    Return :        成功返回    true
*/
bool SonixCam_SerialFlashWrite(long addr, unsigned char pData[], long len);
 
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    FLASH写,写速度比SonixCam_SerialFlashSectorWrite慢,但是写地址空间更大,不要在开图的情况下调用该函数。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:        SonixCam_SerialFlashSectorCustomWrite
*    Description:
*    Parameters:        addr:写的地址,pData:写缓存, len:写数据长度,sft: FLASH的类型
*    Return :            成功返回    true
*/
bool SonixCam_SerialFlashSectorCustomWrite(long addr, unsigned char pData[], long len, SERIAL_FLASH_TYPE sft);
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    FLASH读,读速度比SonixCam_SerialFlashRead慢,但是读地址空间更大
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:        SonixCam_SerialFlashRead
*    Description:
*    Parameters:        addr:要写的地址,pData:写缓存, len:写数据长度
*    Return :            成功返回    true
*/
bool SonixCam_SerialFlashCustomRead(long addr, unsigned char pData[], long len);
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    获得设备Manufacturer
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:        SonixCam_GetManufacturer
*    Description:
*    Parameters:        pData:Manufacturer缓存数组指针,len:缓存数组最大字节数
*    Return :        成功返回    true
*/
bool  SonixCam_GetManufacturer(unsigned char pData[], long len);
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    获得设备Product
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:        SonixCam_GetProduct
*    Description:
*    Parameters:        pData:Product缓存数组指针,len:缓存数组最大字节数
*    Return :        成功返回    true
*/
bool  SonixCam_GetProduct(unsigned char pData[], long len);
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    获得设备vidpid
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:        SonixCam_GetVidPid
*    Description:
*    Parameters:        pData:vidpid缓存数组指针,len:缓存数组最大字节数
*    Return :        成功返回    true
*/
bool  SonixCam_GetVidPid(unsigned char pData[], long len);
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    获得设备String3
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:        SonixCam_GetString3
*    Description:
*    Parameters:        pData:String3缓存数组指针,len:缓存数组最大字节数
*    Return :        成功返回    true
*/
bool SonixCam_GetString3(unsigned char pData[], long len);
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    获得设备Interface
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:        SonixCam_GetInterface
*    Description:
*    Parameters:        pData:Interface缓存数组指针,len:缓存数组最大字节数
*    Return :        成功返回    true
*/
bool SonixCam_GetInterface(unsigned char pData[], long len);
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    获得设备序列号
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:        SonixCam_GetSerialNumber
*    Description:
*    Parameters:        pData:序列号缓存数组指针,len:缓存数组最大字节数
*    Return :        成功返回    true
*/
bool  SonixCam_GetSerialNumber(unsigned char pData[], long len);
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    关闭FLASH的写保护
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:        SonixCam_DisableSerialFlashWriteProtect
*    Description:
*    Parameters:        sft:FLASH类型
*    Return :        成功返回    true
*/
bool SonixCam_DisableSerialFlashWriteProtect(SERIAL_FLASH_TYPE sft);
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    擦除FLASH
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:        SonixCam_EraseSerialFlash
*    Description:
*    Parameters:        sft: FLASH类型
*    Return :        成功返回    true
*/
bool SonixCam_EraseSerialFlash(SERIAL_FLASH_TYPE sft);
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    擦除FLASH的一个扇区
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:    SonixCam_EraseSectorFlash
*    Description:
*    Parameters:    addr:要擦除的扇区地址,sft:FLASH类型
*    Return :    成功返回    true
*/
bool SonixCam_EraseSectorFlash(long addr, SERIAL_FLASH_TYPE sft);
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    擦除FLASH的一个块区
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:    SonixCam_EraseBlockFlash
*    Description:
*    Parameters:    addr:要擦除的块区地址,sft:FLASH类型
*    Return :    成功返回    true
*/
bool SonixCam_EraseBlockFlash(long addr, SERIAL_FLASH_TYPE sft);
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    获得rom类型
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:    SonixCam_GetAsicRomType
*    Description:    
*    Parameters:    romType:返回rom类型,chipID:当前dsp的芯片id值
*    Return :    成功返回    true
*/
bool SonixCam_GetAsicRomType(DSP_ROM_TYPE *romType, unsigned char *chipID);
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    进度回调函数指针
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Description:    SonixCam_BurnerFW, SonixCam_WriteFwToFlash, SonixCam_ExportFW,SonixCam_FullCheckFW, SonixCam_CustomBurnerFW,
*                    SonixCam_SetParamTableFromFWFile中可以传递函数指针来更新烧录进度
*    Parameters:        ptrClass:类指针,fProcess:当前进度值
*    Return :        成功返回    true
*/
typedef void(*SonixCam_SetProgress)(void *ptrClass, float fProcess);
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    烧录固件,不要在开图的情况下调用该函数。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:    SonixCam_BurnerFW
*    Description: 首先会关闭Flash的写保护,然后擦除整个Flash区域,然后将固件写入到Flash
*    Parameters:    pFwBuffer:要烧录的固件缓存指针,lFwLength:固件缓存长度, setProgress:烧录进度回调函数指针, ptrClass:当前类, sft:flash类型, bFullCheckFW:烧录完成后是否进行全校验
*    Return :    成功返回    true
*/
bool  SonixCam_BurnerFW(unsigned char pFwBuffer[], LONG lFwLength, SonixCam_SetProgress setProgress, void *ptrClass, SERIAL_FLASH_TYPE sft, BOOL bFullCheckFW);
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    烧录固件,不要在开图的情况下调用该函数。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:    SonixCam_WriteFwToFlash
*    Description: 该函数与SonixCam_BurnerFW的区别是它不会调用关闭写保护和擦除Flash,需要在调用该函数之前自己关闭Flash写保护和擦除Flash相应区域
*    Parameters:    pFwBuffer:要烧录的固件缓存指针,lFwLength:固件缓存长度, setProgress:烧录进度回调函数指针, ptrClass:当前类, bFullCheckFW:烧录完成后是否进行全校验
*    Return :    成功返回    true
*/
bool  SonixCam_WriteFwToFlash(unsigned char pFwBuffer[], LONG lFwLength, SonixCam_SetProgress setProgress, void *ptrClass, BOOL bFullCheckFW); //BOOL bFullCheckFW = FALSE
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    导出固件
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:    SonixCam_ExportFW
*    Description:
*    Parameters:    pFwBuffer:要保存固件缓存指针,lFwLength:固件缓存长度, setProgress:导出进度回调函数指针, ptrClass:当前类
*    Return :    成功返回    true
*/
bool  SonixCam_ExportFW(unsigned char  pFwBuffer[], LONG lFwLength, SonixCam_SetProgress setProgress, void *ptrClass);
 
//extend burner fw
typedef struct
{
    unsigned int SerialNumberLength;
    unsigned int ProductLength;
    unsigned int ManufactureLength;
    unsigned int VidPidLength;
    unsigned int InterfaceLength;
    unsigned int String3Length;
    char* pSerialNumber;
    char* pProduct;
    char* pManufacture;
    char* pVidPid;
    char* pString3;
    char* pInterface;
}ChangeParamInfo;
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    自定义烧录固件,不要在开图的情况下调用该函数。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:    SonixCam_CustomBurnerFW
*    Description:    该函数和SonixCam_BurnerFW的区别是它可以更改设备的一些参数
*    Parameters:    paramInfo:要更改的参数信息,pFwBuffer:固件缓存指针,lFwLength:缓存长度,setProgress:烧录进度回调函数指针, ptrClass:当前类, sft:FLASH类型,bFullCheckFW:是否烧录完成后进行全校验
*    Return :        成功返回true
*/
bool SonixCam_CustomBurnerFW(const ChangeParamInfo paramInfo, unsigned char pFwBuffer[], LONG lFwLength, SonixCam_SetProgress setProgress, void *ptrClass, SERIAL_FLASH_TYPE sft, BOOL bFullCheckFW);
 
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    修改设备参数表信息,不要在开图的情况下调用该函数。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
*    Function:    SonixCam_SetParamTableFromFWFile
*    Description:    该函数和SonixCam_BurnerFW的区别是它不需要把整个FW烧录到Flash,只需要烧录参数表所在的扇区数据,pFW固件缓存内容必须和设备FLASH中的固件相同
*    Parameters:    pFW:固件缓存指针,lFwLength:缓存长度,setProgress:烧录进度回调函数指针, ptrClass:当前类, sft:FLASH类型,pLogFilePath: 打印的Log文件路径,可以为空,则不打印Log信息, bFullCheckFW:是否烧录完成后进行全校验
*    Return :        成功返回    true
*/
bool SonixCam_SetParamTableFromFWFile(unsigned char pFW[], long lFwLength, const ChangeParamInfo paramInfo, SonixCam_SetProgress setProgress, void *ptrClass, SERIAL_FLASH_TYPE sft, char* pLogFilePath, BOOL bFullCheckFW);
 
#endif