From 58c74e872938cd25577acbe16461af281d04c78d Mon Sep 17 00:00:00 2001 From: "K.Ohta" Date: Fri, 28 Jun 2013 15:57:31 +0900 Subject: [PATCH] [AKC6959] Cont: Use bitfield to save program-memory. --- akc6955.c | 93 +++++++++++++++++++++++++-------------------------------------- 1 file changed, 37 insertions(+), 56 deletions(-) diff --git a/akc6955.c b/akc6955.c index bacda65..089d4ca 100644 --- a/akc6955.c +++ b/akc6955.c @@ -389,21 +389,24 @@ int akc6955_read_level(void) // Get diff. unit = 100Hz. int akc6955_get_diff(void) { - unsigned char diff; + __bitops_t diff; __bitops_t f; int n; - diff = akc6955_readcmd(AKC6955_FDNUM); - if(diff <= 127) { - n = (int)diff & 0x007f; + + diff.byte = akc6955_readcmd(AKC6955_FDNUM); + if(diff.b7) { + diff.b7 = 0; + n = -((int) diff.byte); } else { - n = -((int)(diff & 0x007f)); + diff.b7 = 0; + n = (int)diff.byte; } + f.byte = akc6955_readcmd(AKC6955_POWER); - if(f.b6) { // AM + if(f.b6) { // FM return n * 10; - } else { - return n; // 10n } + return n; // 10n } unsigned int akc6955_up_freq(unsigned int step) @@ -454,12 +457,13 @@ unsigned int akc6955_down_freq(unsigned int step) } void akc6955_setvolumemode(unsigned char flag) { - unsigned char c; - c = akc6955_readcmd(AKC6955_ENABLE) & 0xf7; + __bitops_t c; + c.byte = akc6955_readcmd(AKC6955_ENABLE); + c.b7 = 0; if(flag != 0x00){ - c |= 0x08; + c.b7 = 1; } - akc6955_writecmd(AKC6955_ENABLE, c); + akc6955_writecmd(AKC6955_ENABLE, c.byte); } unsigned char akc6955_getvolumemode(void) @@ -474,10 +478,10 @@ unsigned char akc6955_getvolumemode(void) void akc6955_setvolume(unsigned char level) { - unsigned char c; - c = akc6955_readcmd(AKC6955_VOLUME) & 0x03; +// unsigned char c; +// c = akc6955_readcmd(AKC6955_VOLUME) & 0x03; if(level > 63) level = 63; - akc6955_writecmd(AKC6955_VOLUME, (c | (level << 2))); + akc6955_writecmd(AKC6955_VOLUME, ((akc6955_readcmd(AKC6955_VOLUME) & 0x03) | (level << 2))); } unsigned char akc6955_getvolume(void) @@ -506,40 +510,36 @@ unsigned char akc6955_get_prevolume(void) void akc6955_setphase(unsigned char flag) { - unsigned char c; - c = akc6955_readcmd(AKC6955_VOLUME); + __bitops_t c; + c.byte = akc6955_readcmd(AKC6955_VOLUME); - if(flag == 0) { - c = c & 0xfe; // - } else { - c = c | 0x01; + c.b0 = 0; + if(flag != 0) { + c.b0 = 1; // } - akc6955_writecmd(AKC6955_VOLUME, c); + akc6955_writecmd(AKC6955_VOLUME, c.byte); } void akc6955_setline(unsigned char flag) { - unsigned char c; - c = akc6955_readcmd(AKC6955_VOLUME); - - if(flag == 0) { - c = c & 0xfd; // - } else { - c = c | 0x02; + __bitops_t c; + c.byte = akc6955_readcmd(AKC6955_VOLUME); + c.b1 = 0; + if(flag != 0) { + c.b1 = 1; } - akc6955_writecmd(AKC6955_VOLUME, c); + akc6955_writecmd(AKC6955_VOLUME, c.byte); } void akc6955_set_lowboost(unsigned char flag) { - unsigned char c; - c = akc6955_readcmd(AKC6955_STEREO); - if(flag == 0) { - c &= 0xf7; - } else { - c |= 0x08; + __bitops_t c; + c.byte = akc6955_readcmd(AKC6955_STEREO); + c.b3 = 0; + if(flag != 0) { + c.b3 = 1; } - akc6955_writecmd(AKC6955_STEREO, c); + akc6955_writecmd(AKC6955_STEREO, c.byte); } void akc6955_set_stereomode(unsigned char mode) @@ -572,22 +572,3 @@ unsigned int akc6955_get_battery(void) return batt; } -/* - * 0 = 150KHz - * 1 = 200KHz - * 2 = 50KHz - * 3 = 100KHz - */ -#if 0 -void akc6955_set_fmbandwidth(unsigned char bw) -{ - unsigned char c = akc6955_readcmd(AKC6955_STEREO); - c = (c & 0xfc) | (bw & 0x03); - akc6955_writecmd(AKC6955_STEREO, c); -} -unsigned char akc6955_get_fmbandwidth(void) -{ - unsigned char c = akc6955_readcmd(AKC6955_STEREO) & 0x03; - return c; -} -#endif \ No newline at end of file -- 2.11.0