#include "commondef.h"
#include "eeprom.h"
#include "backlight.h"
+#include "rencoder.h"
void call_freqbank(unsigned int num)
{
// save_eeprom();
}
+static void disp_updown_lcd(void)
+{
+ // _LOCATE(0,0);
+ printstr("CH:");
+ print_numeric_nosupress(setup.memorynum, 3);
+ printstr(" HELP=F");
+ update_status();
+ print_freq(1);
+ _HOME();
+
+}
+
+static unsigned char renc_updown_userfreq(unsigned char dispf)
+{
+ unsigned int count;
+ count = renc_count;
+
+ if((renc_dir == RENC_NONE) || (count == 0)) return dispf;
+ if(renc_dir == RENC_RIGHT) {
+ setup.memorynum += count;
+ } else if(renc_dir == RENC_LEFT) {
+ setup.memorynum = (setup.memorynum +
+ USER_MEMORY_NUM * USER_MEMORY_BANKS) - count;
+ } else {
+ return dispf;
+ }
+ setup.memorynum = setup.memorynum % (USER_MEMORY_NUM * USER_MEMORY_BANKS);
+ rencoder_start();
+ call_freqbank(setup.memorynum);
+ backlight_reset(charcode_f);
+ dispf = backlight_dec(0x00);
+ disp_updown_lcd();
+ return dispf;
+}
+
void on_updown_userfreq(void)
{
unsigned int _freq;
unsigned char _userband;
unsigned char c;
unsigned char dispf = 0xff;
-
+ unsigned int _ui_idle = setup.ui_idlecount / 23;
+ unsigned char _ui_pad = setup.ui_idlecount % 23;
+ unsigned char changef = 0x00;
+
+ if(_ui_idle == 0) _ui_idle = 1;
_fm = setup.fm;
_freq = setup.amfreq;
_userband = setup.am_userbandnum;
_CLS();
do {
+ dispf = renc_updown_userfreq(dispf);
if(dispf != 0) {
- // _LOCATE(0,0);
- printstr("CH:");
- print_numeric_nosupress(setup.memorynum, 3);
- printstr(" HELP=F");
- update_status();
- print_freq(1);
- _HOME();
+ disp_updown_lcd();
}
- c = pollkey_single_timeout(41, 1); // 23*41 = 943ms
+ c = pollkey_single_timeout(_ui_idle, 1); // 23*41 = 943ms
backlight_reset(c);
dispf = backlight_dec(dispf);
+
switch(c) {
case charcode_7: // UP 1CH
setup.memorynum++;
- if(setup.memorynum >= (USER_MEMORY_NUM * USER_MEMORY_BANKS)) setup.memorynum = 0;
- call_freqbank(setup.memorynum);
+ changef = 0xff;
break;
case charcode_1: // Down 1CH
- if(setup.memorynum == 0) setup.memorynum = USER_MEMORY_NUM * USER_MEMORY_BANKS;
- setup.memorynum--;
- call_freqbank(setup.memorynum);
+ changef = 0xff;
+ setup.memorynum = setup.memorynum + (USER_MEMORY_NUM * USER_MEMORY_BANKS) - 1;
break;
case charcode_9: // Up CH FAST
+ changef = 0xff;
setup.memorynum += 100;
- if(setup.memorynum > (USER_MEMORY_NUM * USER_MEMORY_BANKS)) {
- setup.memorynum = setup.memorynum % 100;
- }
- call_freqbank(setup.memorynum);
break;
case charcode_3: // Down CH FAST
- if(setup.memorynum < 100) {
- setup.memorynum = (((USER_MEMORY_NUM * USER_MEMORY_BANKS) / 100 - 1) * 100) + (setup.memorynum % 100);
- } else {
- setup.memorynum -= 100;
- }
- call_freqbank(setup.memorynum);
+ changef = 0xff;
+ setup.memorynum = setup.memorynum + (USER_MEMORY_NUM * USER_MEMORY_BANKS) - 100;
break;
case charcode_8: // Up CH MID
+ changef = 0xff;
setup.memorynum += USER_MEMORY_NUM;
- if(setup.memorynum >= (USER_MEMORY_NUM * USER_MEMORY_BANKS)) {
- setup.memorynum = setup.memorynum - USER_MEMORY_NUM * USER_MEMORY_BANKS;
- }
- call_freqbank(setup.memorynum);
break;
case charcode_2: // Down CH MID
- if(setup.memorynum < USER_MEMORY_NUM) {
- setup.memorynum = (USER_MEMORY_NUM * USER_MEMORY_BANKS) - USER_MEMORY_NUM + setup.memorynum;
- } else {
- setup.memorynum -= USER_MEMORY_NUM;
- }
- call_freqbank(setup.memorynum);
+ changef = 0xff;
+ setup.memorynum = setup.memorynum + (USER_MEMORY_NUM * USER_MEMORY_BANKS) - USER_MEMORY_NUM;
break;
case charcode_5: // Recall
- call_freqbank(setup.memorynum);
+ changef = 0xff;
break;
case charcode_d: // Reset
if(_fm) { // AM
_CLS();
break;
case charcode_e: // Set Light
+ if(dispf == 0x00){
+ dispf = 0xff;
+ } else {
+ dispf = 0x00;
+ }
+ break;
default:
break;
}
- idle_time_ms(9); // Pad 9ms, 1Loop = 1000ms.
+
+ setup.memorynum = setup.memorynum % (USER_MEMORY_NUM * USER_MEMORY_BANKS);
+ if(changef != 0) {
+ call_freqbank(setup.memorynum);
+ }
+ if(_ui_pad != 0) idle_time_ms(_ui_pad); // Pad 9ms, 1Loop = 1000ms.
+ changef = 0;
} while(1);
_l0:
_CLS();
*/
#include "rencoder.h"
-unsigned char renc_state_a;
-unsigned char renc_state_b;
+static unsigned char renc_state_a;
+static unsigned char renc_state_b;
unsigned char renc_dir;
unsigned int renc_count;
-unsigned int renc_reset_count;
+static unsigned int renc_reset_count;
+//static unsigned char renc_penalty;
void rencoder_init(void)
{
RENC_TRIS_B = 1;
renc_count = 0;
renc_dir = RENC_NONE;
- renc_state_a = 0;
- renc_state_b = 0;
+ renc_state_a = RENC_PH_A;
+ renc_state_b = RENC_PH_B;
renc_reset_count = 0;
+// renc_penalty = 0;
}
{
// T1CONbits.TMR1ON = 1;
T1CON = 0b10110100;// RD16, T1RUN=0, 1/32 fOSC, TNR1CS=0, TMR1ON=0;
- TMR1H = (65536 - 800) >> 8; // Tick = 4us, Count = 800(3.2ms)
- TMR1L = (65536 - 800) & 255;
+ TMR1H = (65536 - 600) >> 8; // Tick = 4us, Count = 600(2.4ms)
+ TMR1L = (65536 - 600) & 255;
// T1CONbits.TMR1ON = 0;
PIR1bits.TMR1IF = 0;
PIE1bits.TMR1IE = 1;
void rencoder_start(void)
{
rencoder_stop();
+ rencoder_init();
rencoder_restart();
}
PIR1bits.TMR1IF = 0;
PIE1bits.TMR1IE = 0;
IPR1bits.TMR1IP = 1;
- rencoder_init();
+// rencoder_init();
}
unsigned char pha = RENC_PH_A;
unsigned char phb = RENC_PH_B;
+// if(renc_penalty != 0){
+// renc_penalty++;
+// if(renc_penalty > 1) {
+// renc_penalty = 0;
+// }
+// return;
+// }
/*
* Count sequence description of rotary-encoder:
* See figure of http://homepage1.nifty.com/rikiya/software/113ROTENC.htm .
} else {
dir = RENC_LEFT;
}
- }
- renc_state_a = pha;
- //renc_state_b = phb;
+ // renc_penalty++;
+ }
} else if(phb != renc_state_b){
if(phb == 1){ // B: RISE UP
if(pha == 0){ // A: Stable
} else {
dir = RENC_RIGHT;
}
+ // renc_penalty++;
}
- //renc_state_a = pha;
- renc_state_b = phb;
- }
-
- if(dir != RENC_NONE) {
- if(dir == renc_dir) {
- renc_count++;
- } else {
- renc_count = 0;
- renc_dir = dir;
- }
- renc_reset_count = 0;
- } else{
+ } else {
renc_reset_count++;
- if(renc_reset_count >= 1000) { // 3200ms
+ if(renc_reset_count >= 5000) { // 3200ms
renc_count = 0;
renc_dir = RENC_NONE;
renc_state_a = 0;
renc_state_b = 0;
renc_reset_count = 0;
+ //renc_penalty = 0;
}
+ return;
}
-
-
+ renc_state_a = pha;
+ renc_state_b = phb;
+ if(dir == RENC_NONE) return;
+
+ if(dir == renc_dir) {
+ renc_count++;
+ } else {
+ renc_count = 0;
+ renc_dir = dir;
+ }
+ renc_reset_count = 0;
// rencoder_up(dir);
}
#include "power.h"
#include "adc_int.h"
#include "backlight.h"
+#include "rencoder.h"
static void setfreq_updown_amsub(void)
{
}
}
+unsigned char setfreq_renc_updown(unsigned char dispf)
+{
+ unsigned int freq;
+
+ if(setup.fm != 0) {
+ switch(setup.fm_tunepitch & 3) {
+ case 0:
+ freq = 1; // 25KHz
+ break;
+ case 1:
+ freq = 2; // 50KHz
+ break;
+ case 2:
+ freq = 4; // 100KHz
+ break;
+ default:
+ freq = 8; // 200KHz excepts TV1/TV2.
+ if((setup.fmband == AKC6955_BAND_TV1) || (setup.fmband == AKC6955_BAND_TV2)) {
+ freq = 4; // 100KHz
+ }
+ break;
+ }
+ freq = freq * renc_count;
+ } else {
+ if(setup.amband == AKC6955_BAND_MW2) {
+ freq = renc_count * 3;
+ } else {
+ freq = renc_count;
+ }
+ }
+
+ if(freq != 0) { // WORKAROUND: IF STEP=0 then go maximum X-)
+ if(renc_dir == RENC_LEFT) {
+ akc6955_down_freq(freq);
+ } else if(renc_dir == RENC_RIGHT) {
+ akc6955_up_freq(freq);
+ }
+ if(dispf == 0) {
+ acm1602_resume(LCD_I2CADDR);
+ dispf = 0xff;
+ }
+ backlight_reset(charcode_f);
+ update_status();
+ update_display();
+ rencoder_start();
+ }
+ return dispf;
+}
+
void setfreq_updown(unsigned char ctlword)
{
unsigned int freq;