This commit is contained in:
pvvx 2017-09-25 19:31:57 +03:00
parent 7ce370d5b3
commit b075b615b6
26 changed files with 410 additions and 119 deletions

View file

@ -62,6 +62,14 @@ typedef struct _SLEEP_WKUP_EVENT_ {
*
* The processor can be woken up by any internal peripheral interrupt or external pin interrupt.
*
* Процессор настроен для сна и отправлен спать с помощью __WFI().
* В этом режиме системные часы ядра останавливаются до тех пор, пока не произойдет сброс или прерывание.
* Это снижает динамическую мощность используемую процессором, системами памяти и шинами.
* Процессор, периферийное устройство и состояние памяти поддерживаются,
* а периферийные устройства продолжают работать и могут генерировать прерывания.
*
* Процессор может быть разбужен любым внутренним периферийным прерыванием или внешним прерыванием.
*
* @note
* The mbed interface semihosting is disconnected as part of going to sleep, and can not be restored.
* Flash re-programming and the USB serial port will remain active, but the mbed program will no longer be
@ -72,6 +80,8 @@ void sleep_ex_selective(uint32_t wakeup_event, uint32_t sleep_duration, uint32_
void standby_wakeup_event_add(uint32_t wakeup_event, uint32_t sleep_duration_ms, uint32_t gpio_active);
void standby_wakeup_event_del(uint32_t wakeup_event);
void deepstandby_ex(void);
/** Send the microcontroller to deep sleep
@ -79,13 +89,18 @@ void deepstandby_ex(void);
* This processor is setup ready for deep sleep, and sent to sleep using __WFI(). This mode
* has the same sleep features as sleep plus it powers down peripherals and clocks. All state
* is still maintained.
* Этот процесc настроен на глубокий сон и отправлен спать с помощью __WFI().
* Этот режим имеет те же функции сна, что и sleep, но отключает периферийные устройства и часы.
* Все состояния сохраняются.
*
* The processor can only be woken up by an external interrupt on a pin or a timer.
* Процессор может быть разбужен только внешним прерыванием на штыре или таймере.
*
* @note
* The mbed interface semihosting is disconnected as part of going to sleep, and can not be restored.
* Flash re-programming and the USB serial port will remain active, but the mbed program will no longer be
* able to access the LocalFileSystem
*
*/
void deepsleep_ex(uint32_t wakeup_event, uint32_t sleep_duration);

View file

@ -178,9 +178,9 @@ void standby_wakeup_event_add(uint32_t wakeup_event, uint32_t sleep_duration_ms,
DStandbyWakeupEvent.gpio_option &= ~gpio_act;
}
}
gpio_event = gpio_event << 1;
gpio_en = gpio_en << 1;
gpio_act = gpio_act << 1;
gpio_event <<= 1;
gpio_en <<= 1;
gpio_act <<= 1;
}
}

View file

@ -98,7 +98,7 @@ struct stream_context
#define RTP_PT_H263 34
#define RTP_PT_RTCP_BASE 72
#define RTP_PT_DYN_BASE 96
#define RTP_PT_UNKNOWN -1
//?#define RTP_PT_UNKNOWN -1
#include "section_config.h"
SDRAM_DATA_SECTION
@ -333,4 +333,4 @@ void fillRtpHeader(rtp_hdr_t *rtphdr, int version, int padding, int extension, i
/************************************************************** end of rtp **************************************************************/
#endif
#endif

View file

@ -2016,9 +2016,9 @@ struct v4l2_create_buffers {
* I O C T L C O D E S F O R V I D E O D E V I C E S
*
*/
#define VIDIOC_QUERYCAP _IOR('V', 0, struct v4l2_capability)
#define VIDIOC_RESERVED _IO('V', 1)
#define VIDIOC_ENUM_FMT _IOWR('V', 2, struct v4l2_fmtdesc)
#define VIDIOC_QUERYCAP _IOR('V', 0, struct v4l2_capability)
#define VIDIOC_RESERVED _IO('V', 1)
#define VIDIOC_ENUM_FMT _IOWR('V', 2, struct v4l2_fmtdesc)
#define VIDIOC_G_FMT _IOWR('V', 4, struct v4l2_format)
#define VIDIOC_S_FMT _IOWR('V', 5, struct v4l2_format)
#define VIDIOC_REQBUFS _IOWR('V', 8, struct v4l2_requestbuffers)

View file

@ -56,14 +56,14 @@ struct v4l2_prio_state {
/*
enum v4l2_priority {
V4L2_PRIORITY_UNSET = 0, // 不初始化
V4L2_PRIORITY_BACKGROUND = 1, // 背景
V4L2_PRIORITY_INTERACTIVE = 2, // 互動
V4L2_PRIORITY_RECORD = 3, // 紀錄
V4L2_PRIORITY_UNSET = 0, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>l<EFBFBD><EFBFBD>
V4L2_PRIORITY_BACKGROUND = 1, // <EFBFBD>I<EFBFBD><EFBFBD>
V4L2_PRIORITY_INTERACTIVE = 2, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
V4L2_PRIORITY_RECORD = 3, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
V4L2_PRIORITY_DEFAULT = V4L2_PRIORITY_INTERACTIVE,
};
Multiple Opens操作device同時被多個thread (i.e open())
使prios[4]
ɬ<EFBFBD><EFBFBD><EFBFBD>v<EFBFBD>O<EFBFBD><EFBFBD><EFBFBD>FMultiple Opens<EFBFBD>ާ@<EFBFBD>A<EFBFBD><EFBFBD>i<EFBFBD>H<EFBFBD><EFBFBD><EFBFBD>device<EFBFBD>P<EFBFBD>ɳQ<EFBFBD>h<EFBFBD><EFBFBD>thread <EFBFBD><EFBFBD><EFBFBD>}(i.e open())
<EFBFBD>ݭn<EFBFBD>γo<EFBFBD>u<EFBFBD><EFBFBD><EFBFBD>v<EFBFBD>h<EFBFBD>Ϥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӿާ@<EFBFBD>󭫭n<EFBFBD>A<EFBFBD>ϥΪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>u<EFBFBD><EFBFBD><EFBFBD>ŧO<EFBFBD>A<EFBFBD><EFBFBD>prios[4]<EFBFBD>N<EFBFBD>[<EFBFBD>@<EFBFBD>C
*/
void v4l2_prio_init(struct v4l2_prio_state *global);
@ -80,10 +80,10 @@ struct v4l2_file_operations {
//ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
//ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
//unsigned int (*poll) (struct file *, struct poll_table_struct *);
long (*ioctl) (unsigned int, unsigned long);
long (*unlocked_ioctl) (unsigned int, unsigned long);
long (*ioctl) (unsigned int, void *); //pvvx unsigned long);
long (*unlocked_ioctl) (unsigned int, void *); //pvvx unsigned long);
#ifdef CONFIG_COMPAT
long (*compat_ioctl32) (unsigned int, unsigned long);
long (*compat_ioctl32) (unsigned int, void *); //pvvx unsigned long);
#endif
//unsigned long (*get_unmapped_area) (struct file *, unsigned long,
// unsigned long, unsigned long, unsigned long);

View file

@ -218,22 +218,12 @@
#endif
/* Atomic integer operations */
#ifndef atomic_set
#if 0
#define atomic_set(v, i) RTL_ATOMIC_SET((v), (i))
#endif
#ifndef atomic_read
#define atomic_read(v) RTL_ATOMIC_READ((v))
#endif
#ifndef atomic_add
#define atomic_add(v, i) RTL_ATOMIC_ADD((v), (i))
#endif
#ifndef atomic_sub
#define atomic_sub(v, i) RTL_ATOMIC_SUB((v), (i))
#endif
#ifndef atomic_inc
#define atomic_inc(v) RTL_ATOMIC_INC((v))
#endif
#ifndef atomic_dec
#define atomic_dec(v) RTL_ATOMIC_DEC((v))
#endif
@ -291,7 +281,7 @@
/*
* combine the four dirtypenrsize parameters to one cmd parameter
* combine the four dir<EFBFBD>Atype<EFBFBD>Anr<EFBFBD>Asize parameters to one cmd parameter
*
*/
#ifndef _IOC
@ -511,40 +501,40 @@ found:
static inline unsigned long find_next_zero_bit(
const unsigned long *addr,unsigned long size, unsigned long offset)
{
const unsigned long *p = addr + BIT_WORD(offset); // offset位于p指向的long地址32位空?
unsigned long result = offset & ~(BITS_PER_LONG-1); // offset是第result?4字?
const unsigned long *p = addr + BIT_WORD(offset); // offset<EFBFBD><EFBFBD>_p<EFBFBD><EFBFBD><EFBFBD>V<EFBFBD><EFBFBD>long<EFBFBD>a<EFBFBD>}32<33><32><EFBFBD>?
unsigned long result = offset & ~(BITS_PER_LONG-1); // offset<EFBFBD>O<EFBFBD><EFBFBD>result?4<>r?
unsigned long tmp;
if (offset >= size)
return size;
size -= result; // ?整32位整倍?上
offset %= BITS_PER_LONG; // offset位于32位的第几位
if (offset) { // offset不在一?long?据的第0位上,在1-31位中[luther.gliethttp]
size -= result; // ?<EFBFBD><EFBFBD>32<EFBFBD><EFBFBD>㭿?<3F>W
offset %= BITS_PER_LONG; // offset<EFBFBD><EFBFBD>_32<EFBFBD><EFBFBD>ĤL<EFBFBD><EFBFBD>
if (offset) { // offset<EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>@?long?<3F>u<EFBFBD><75><EFBFBD><EFBFBD>0<EFBFBD><30>W,<2C>b1-31<33>[luther.gliethttp]
tmp = *(p++);
tmp |= ~0UL >> (BITS_PER_LONG - offset); // ?0-offset?据填充上1.
if (size < BITS_PER_LONG) // 不足32bits
tmp |= ~0UL >> (BITS_PER_LONG - offset); // ?0-offset?<EFBFBD>u<EFBFBD><EFBFBD>R<EFBFBD>W1.
if (size < BITS_PER_LONG) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>32bits
goto found_first;
if (~tmp) // 取非非0?明含有0值
if (~tmp) // <EFBFBD><EFBFBD><EFBFBD>D<EFBFBD>D0?<3F><><EFBFBD>t<EFBFBD><74>0<EFBFBD><30>
goto found_middle;
size -= BITS_PER_LONG; // 如果上面~tmp等于0,那么?明?*p?据?32位全1.[luther.gliethttp]
size -= BITS_PER_LONG; // <EFBFBD>p<EFBFBD>G<EFBFBD>W<EFBFBD><EFBFBD>~tmp<6D><70><EFBFBD>_0,<2C><><EFBFBD>\?<3F><>?*p?<3F>u?32<33><32><EFBFBD>1.[luther.gliethttp]
result += BITS_PER_LONG;
}
while (size & ~(BITS_PER_LONG-1)) { // 好了,?行到?里,我?的offset已??在4字?的第0位上,下面?行
if (~(tmp = *(p++))) // 4字?快速查?.如果~tmp非0,?明?32位?据中含有0?据,找到.[luther.gliethttp]
while (size & ~(BITS_PER_LONG-1)) { // <EFBFBD>n<EFBFBD>F,?<3F><><EFBFBD>?<3F><>,<2C><>?<3F><>offset<65>w??<3F>b4<62>r?<3F><><EFBFBD><EFBFBD>0<EFBFBD><30>W,<2C>U<EFBFBD><55>?<3F><>
if (~(tmp = *(p++))) // 4<EFBFBD>r?<3F>ֳt<D6B3>d?.<2E>p<EFBFBD>G~tmp<6D>D0,?<3F><>?32<33><32>?<3F>u<EFBFBD><75><EFBFBD>t<EFBFBD><74>0?<3F>u,<2C><><EFBFBD>.[luther.gliethttp]
goto found_middle;
result += BITS_PER_LONG; // 到下一?4字?空?
size -= BITS_PER_LONG; // ?少4字??据
result += BITS_PER_LONG; // <EFBFBD><EFBFBD>U<EFBFBD>@?4<>r?<3F><>?
size -= BITS_PER_LONG; // ?<EFBFBD><EFBFBD>4<EFBFBD>r??<3F>u
}
if (!size) // size等于0,?明首先size等于4字?整倍?,其次所有?据已?查完,
return result; // 所有?据全部?1,?有??0位,result等于size.[luther.gliethttp]
tmp = *p; // size不是32位整倍?,?剩几?bit?有?查,???行下面?查工作.[luther.gliethtp]
if (!size) // size<EFBFBD><EFBFBD><EFBFBD>_0,?<3F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>size<7A><65><EFBFBD>_4<5F>r?<3F>㭿?,<2C><EFBFBD>Ҧ<EFBFBD>?<3F>u<EFBFBD>w?<3F>d<EFBFBD><64>,
return result; // <EFBFBD>Ҧ<EFBFBD>?<3F>u<EFBFBD><75><EFBFBD><EFBFBD>?1,?<3F><>??0<><30>,result<6C><74><EFBFBD>_size.[luther.gliethttp]
tmp = *p; // size<EFBFBD><EFBFBD><EFBFBD>O32<EFBFBD><EFBFBD>㭿?,?<3F>ѤL?bit?<3F><>?<3F>d,???<3F><>U<EFBFBD><55>?<3F>d<EFBFBD>u<EFBFBD>@.[luther.gliethtp]
found_first:
tmp |= ~0UL << size; // ?在0-size?有效?据,size-31?未使用空?,所以先?size-31置成全1.
if (tmp == ~0UL) /* Are any bits zero? */ // 如果tmp全1,那么?明就?找找1?
return result + size; /* Nope. */ // result+size就等于函??入的??size大小.[luther.gliethttp]
tmp |= ~0UL << size; // ?<EFBFBD>b0-size?<3F><><EFBFBD><EFBFBD>?<3F>u,size-31?<3F><><EFBFBD>ϥΪ<CFA5>?,<2C>ҥH<D2A5><48>?size-31<33>m<EFBFBD><6D><EFBFBD><EFBFBD>1.
if (tmp == ~0UL) /* Are any bits zero? */ // <EFBFBD>p<EFBFBD>Gtmp<EFBFBD><EFBFBD>1,<2C><><EFBFBD>\?<3F><><EFBFBD>N?<3F><><EFBFBD>1?
return result + size; /* Nope. */ // result+size<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><EFBFBD>??<3F>J<EFBFBD><4A>??size<7A>j<EFBFBD>p.[luther.gliethttp]
found_middle:
return result + ffz(tmp); // 我?在32位?据的0-31中??必定存在0位值,?算他是第几位.[luther.gliethttp]
return result + ffz(tmp); // <EFBFBD><EFBFBD>?<3F>b32<33><32>?<3F>u<EFBFBD><75>0-31<33><31>??<3F><><EFBFBD>w<EFBFBD>s<EFBFBD>b0<62><30><EFBFBD>,?<3F><>L<EFBFBD>O<EFBFBD>ĤL<C4A4><4C>.[luther.gliethttp]
}
//int find_next_zero_bit(const void * p, int size, int offset);
@ -570,7 +560,7 @@ static inline void set_bit(int nr, volatile unsigned long *addr)
unsigned long mask = BIT_MASK(nr);
unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr);
unsigned long flags;
(void)flags;
//taskENTER_CRITICAL();
_atomic_spin_lock_irqsave(p, flags);
*p |= mask;
@ -594,6 +584,7 @@ static inline void clear_bit(int nr, volatile unsigned long *addr)
unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr);
unsigned long flags;
(void)flags;
_atomic_spin_lock_irqsave(p, flags);
//taskENTER_CRITICAL();
*p &= ~mask;
@ -617,6 +608,7 @@ static inline void change_bit(int nr, volatile unsigned long *addr)
unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr);
unsigned long flags;
(void)flags;
//taskENTER_CRITICAL();
_atomic_spin_lock_irqsave(p, flags);
*p ^= mask;
@ -638,8 +630,8 @@ static inline int test_and_set_bit(int nr, volatile unsigned long *addr)
unsigned long mask = BIT_MASK(nr);
unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr);
unsigned long old;
//unsigned long flags;
unsigned long flags;
(void)flags;
//taskENTER_CRITICAL();
_atomic_spin_lock_irqsave(p, flags);
@ -667,6 +659,7 @@ static inline int test_and_clear_bit(int nr, volatile unsigned long *addr)
unsigned long old;
unsigned long flags;
(void)flags;
//taskENTER_CRITICAL();
_atomic_spin_lock_irqsave(p, flags);
old = *p;
@ -691,7 +684,7 @@ static inline int test_and_change_bit(int nr, volatile unsigned long *addr)
unsigned long old;
unsigned long flags;
(void)flags;
_atomic_spin_lock_irqsave(p, flags);
old = *p;
*p = old ^ mask;
@ -725,6 +718,7 @@ static inline int bitmap_andnot(unsigned long *dst, const unsigned long *src1,
static inline int atomic_inc_return(volatile atomic_t *v)
{
unsigned long flags;
(void)flags;
int retval;
cris_atomic_save(v, flags);
retval = ++(v->counter);
@ -741,6 +735,7 @@ typedef __u64 __be64;
typedef __u16 __sum16;
typedef __u32 __wsum;
#if 0
#ifndef __GFP_WAIT
#define __GFP_WAIT (0x10u)
#endif
@ -770,6 +765,8 @@ typedef __u32 __wsum;
#define copy_to_user(to, from, sz) _memcpy((to), (from), (sz))
#endif
#endif
#if 0 /*comment since we are not using polling*/
/* These are specified by iBCS2 */
#ifndef POLLIN
@ -843,4 +840,4 @@ do { \
#define DEFAULT_POLLMASK (POLLIN | POLLOUT | POLLRDNORM | POLLWRNORM)
#endif
#endif /*_V4L2_OSDEP_H_*/
#endif /*_V4L2_OSDEP_H_*/