ادامه ماجرا ....
برای شروع، یه فلگ در فایل IRCconfig.h برای استفاده و یا عدم استفاده از پروتکل جدید به شکل زیر تعریف میکنیم :
#define IR_USE_LEXUS 1 //IRC LEXUS protocol detection, only RX
و بعدش در فایل IRC.h زمان پایه رو برای پروتکل جدید ثبت میکنیم :
#define T_LEXUS (300000 /T_CLK) //Base time for LEXUS format (T=300us)
و یک ID هم برای فریمش ایجاد میکنیم ( حتما باید زوج و غیر تکراری باشه ) :
#define LEXUS 0x0C
و ادامه ماجرا برای دیکود کردن پکت جدید در فایل IRC.c
از اونجایی که مشخصات استارت بیت این پروتکل نسبت به صفر و یک هاش منحصر نیست، برای تفکیک استارت بیت با سایر بیت ها، یه فلگ دیکه در این فایل ایجاد میکنیم :
unsigned char LEXUSflag;
روتین ISR_CAPTURE دریافت ها رو در لبه های بالا و پائین رونده موج شناسائی میکنه، لبه های بالا رونده در زیر مجموعه (()if(IR_CAPT_TEST شناسایی میشن و لبه های پائین رونده، در خارج از این مجموعه.....
کد:
ISR_CAPTURE()
{
.
.
.
// On stop of burst (rising edge)
if(IR_CAPT_TEST())
{
.
.
.
return;
}//IR_CAPT_TEST
// On start of burst (falling edge)
.
.
.
.
} //ISR_CAPTURE
شروع شناسایی پکت در اولین لبه پائین رونده موجه که در تصویر Start Detection نام گذاری شده و بعد از اون، اجبارا اولین شناسایی در اولین لبه پائین رونده هستش که شناسائی استارت بیت و مشخص شدن نوع پروتکل پکت هست و در تصویر Detect 1 نام گذاری شده.
با توجه به شکل موج Invert شده در تصویر، برای از دست نرفتن D6 و ساده تر شدن خوندن پکت ها، تصمیم گرفتم که ادامه شناسایی بیت های ارسالی در لبه های بالا رونده باشه که در تصویر از Detect 2 تا Detect 12 نام گذاری شده اند.
یه توضیح در مورد اون شکل موج کوچک سمت چپ-پائین تصویر بدم تا ادامه ماجرا باشه در پست بعدی ( مهمه! )
در روتین ISR_CAPTURE به محض وقوع اینتراپت در لبه های بالا رونده، اندازه سطح پائین موج در متغیر PW1 قرار میگیره و در اینتراپت های لبه های پائین رونده، اندازه سطح پائین موج در متغیر PW و اندازه سطح بالای موج در متغیر ct قرار میگیره.....
ادامه دارد