예제 #1
0
void sendChannel1()
{
    sendHeader(1);
    //analog inputs
    for(uint8_t i=0;i < sizeOfArray(channel1);i++) {
        AnalogInputs::Name name = pgm::read(&channel1[i]);
        uint16_t v = AnalogInputs::getRealValue(name);
        printUInt(v);
        printD();
    }

    for(uint8_t i=0;i<MAX_BANANCE_CELLS;i++) {
        printUInt(TheveninMethod::getReadableRthCell(i));
        printD();
    }

    printUInt(TheveninMethod::getReadableBattRth());
    printD();

    printUInt(TheveninMethod::getReadableWiresRth());
    printD();

    printUInt(Monitor::getChargeProcent());
    printD();
    printUInt(Monitor::getETATime());
    printD();

    sendEnd();
}
예제 #2
0
CubeMesh::CubeMesh(const Vector& size) : Mesh(GL_TRIANGLES, false)
{
    // -0.5 .. 0.5
    static const float vertices[][3] = {
        /* 0 */ { -0.5, -0.5, -0.5 },
        /* 1 */ {  0.5, -0.5, -0.5 },
        /* 2 */ {  0.5, -0.5,  0.5 },
        /* 3 */ { -0.5, -0.5,  0.5 },

        /* 4 */ { -0.5,  0.5, -0.5 },
        /* 5 */ {  0.5,  0.5, -0.5 },
        /* 6 */ {  0.5,  0.5,  0.5 },
        /* 7 */ { -0.5,  0.5,  0.5 },
    };

    static const int faces[][6] = {
        { 0, 1, 2, 3, 0, 2 }, // bottom
        { 4, 7, 6, 5, 4, 6 }, // up
        { 4, 5, 1, 0, 4, 1 }, // front
        { 6, 7, 3, 2, 6, 3 }, // back
        { 7, 4, 0, 3, 7, 0 }, // left
        { 5, 6, 2, 1, 5, 2 }, // right
    };
    
    static const float normals[][3] = {
        {  0.0, -1.0,  0.0 }, // bottom
        {  0.0,  1.0,  0.0 }, // up
        {  0.0,  0.0, -1.0 }, // front
        {  0.0,  0.0,  1.0 }, // back
        { -1.0,  0.0,  0.0 }, // left
        {  1.0,  0.0,  0.0 }, // right
    };

    static const float uv[][2] = {
        { 1.0, 0.0 },
        { 0.0, 0.0 },
        { 0.0, 1.0 },
        { 1.0, 1.0 },
        { 1.0, 0.0 },
        { 0.0, 1.0 },
    };

    for (size_t i = 0; i < sizeOfArray(faces); i++)
    {
        for (int k=0; k<6; k++)
        {
            m_faces.push_back(Face(UV(uv[k][0], uv[k][1]),
                                   Vector(normals[i][0], normals[i][1], normals[i][2]),
                                   size * Vector(vertices[faces[i][k]][0], vertices[faces[i][k]][1], vertices[faces[i][k]][2]))
                             );
        }
    }

    init();
}
예제 #3
0
bool SettingsMenu::run() {
    int8_t index;
    do {
        index = runSimple();

        if(index < 0) return false;
        switch(index) {
        case sizeOfArray(SettingsStaticMenu) - 2:  //reset
            p_.setDefault();
            buzzer.soundSelect();
            break;
        case sizeOfArray(SettingsStaticMenu) - 1:  //save
            return true;
        default:
            Settings undo(p_);
            if(!runEdit(index))
                p_ = undo;
            p_.check();
            p_.apply();
            break;
        }
    } while(true);
}
예제 #4
0
파일: MODR1.C 프로젝트: fhamilt1/cs450
/**
	Procedure: cmpP2S

	Purpose: Compares User Input to String (1 True, 0 False)

	Parameters: Buffer(input from keyboard)
				Word(the string being compared to)

	Return value: Comparison Code; Zero If Not Same

	Calls: sizeOfPointer, sizeOfArray

	Globals: None

	Errors: None
**/
int cmpP2S(char *Buffer, char Word[]){
	int WordSize, BufferSize;
	int Temp;
	int flag= 0;
	int i = 0;
	BufferSize = sizeOfPointer(Buffer);
	WordSize = sizeOfArray(Word);
	//printf("\n\n%d",WordSize);
	if(WordSize <1){
		//error word to short
		printf("error 1");
		return -1;
	}
	else{
		if(BufferSize>WordSize){
			//printf(">");
			return 0;
		}
		else if(BufferSize<WordSize){
			//printf("<");
			return 0;
		}
		else{
			while(i< WordSize){
				//printf("\nWord:%c Buff:%c",Word[i],Buffer[i]);
				if(Word[i] != Buffer[i]){
					flag = 1;
					break;
				}
				i++;
			}
			
			//printf("%d",flag);
			if(flag == 0){
				//printf("\nzero!");
				//sys_req(READ,TERMINAL,Buffer,&bufSize);
				return 1;
			}
			else{
				//printf("\nnot 0");
				//sys_req(READ,TERMINAL,Buffer,&bufSize);
				return 0;
			}
		}
	}
}	
예제 #5
0
jint ImagePHash::registerNative(JNIEnv* env) {
	if (!env) {
		return JNI_ERR;
	}

	jclass ImagePHash = env->FindClass(CLASS_NAME);

	if (ImagePHash == NULL) {
		return JNI_ERR; // Exception
	}

	jint result = env->RegisterNatives(
			ImagePHash,
			NATIVE_METHOD,
			sizeOfArray(NATIVE_METHOD)
		);

	env->DeleteLocalRef(ImagePHash);

	return result;
} // ImagePHash::registerNative
예제 #6
0
uint8_t Keyboard::getPressedWithDelay()
{
    uint8_t key, i = 0;

    do {
        Time::delayDoIdle(BUTTON_DELAY);
        key = hardware::getKeyPressed();
        if(last_key_count_ == 0) {
            last_key_ = key;
            state_ = 0;
            delay_ = 0;
        }
        last_key_count_ += (last_key_ == key)? 1: -1;

        if(last_key_count_ > BUTTON_DEBOUNCE_COUNT) {
            // button pressed
            last_key_count_ = BUTTON_DEBOUNCE_COUNT;
            i++;
        } else {
            //button changed
            i = 0;
        }
    } while (i <= pgm::read(&stateDelay[state_]));

    if(state_ < sizeOfArray(stateDelay) - 1) {
        delay_++;
        if(delay_ >= pgm::read(&stayInState[state_])) {
            if(last_key_ == BUTTON_NONE) {
                state_ = 0; //we stay at state == 1 while last_key_ == BUTTON_NONE
            } else if(state_ == 0) {
                    Buzzer::soundKeyboard();
            }

            state_ ++;
            delay_ = 0;
        }
    }

    return last_key_;
}
예제 #7
0
static void test_utility_StringPrinter()
{
    String name = "1.txt";

    StringPrinter("abc\n").printToFile(name);
    StringPrinter().format("abc").format("%s\n", "def").printToFile(name);
    StringPrinter().pushFormat("abc").pushFormat("%s\n", "def").printToFile(name);
    {
        StringPrinter p;
        p.stream() << "ab" << "c";
        p.stream() << "de" << "f\n";
        p.printToFile(name);
    }
    {
        StringPrinter p;
        p.pushStream() << "ab" << "c";
        p.pushStream() << "de" << "f\n";
        p.printToFile(name);
    }

    {
        CachedOutputFileManager::getSingletonPtr()->getFile(name).flush();

        std::ifstream fi(name.c_str());
        const char *strs[] = 
        {
            "abc", "def", "abcdef", "def", "abcdef",
        };

        for (size_t i = 0; i < sizeOfArray(strs); ++i)
        {
            String l;
            ASSERT(getline(fi, l) && l == strs[i]);
        }
    }
}
예제 #8
0
void SettingsMenu::run() {
    int8_t index;
    do {
        index = runSimple();

        if(index < 0) return;
        switch(index) {
        case sizeOfArray(SettingsStaticMenu) - 1:  //reset
            p_.setDefault();
            Buzzer::soundSelect();
            break;
        default:
            Settings undo(p_);
            if(!runEdit(index)) {
                p_ = undo;
            } else {
                Buzzer::soundSelect();
                p_.check();
            }
            p_.apply();
            break;
        }
    } while(true);
}
예제 #9
0
static void test_utility_arraySize()
{
    struct A{};
    A a[5];
    ASSERT(sizeOfArray(a) == 5);
}
예제 #10
0
uint16_t ProgramData::getDefaultVoltagePerCell(VoltageType type)
{
    STATIC_ASSERT(sizeOfArray(voltsPerCell) == ProgramData::LAST_BATTERY_TYPE);
    uint16_t result = pgm::read(&voltsPerCell[battery.type][type]);
    return result;
}
예제 #11
0
ProgramData::BatteryClass ProgramData::getBatteryClass() {
    STATIC_ASSERT(sizeOfArray(ProgramData::batteryClassMap) == ProgramData::LAST_BATTERY_TYPE);
    return pgm::read(&ProgramData::batteryClassMap[battery.type]);
}
예제 #12
0
const char * const  ProgramData::batteryString[] PROGMEM = {
        string_battery_None,
        string_battery_NiCd,
        string_battery_NiMH,
        string_battery_Pb,
        string_battery_Life,
        string_battery_Lilo,
        string_battery_Lipo,
        string_battery_Li430,
        string_battery_Li435,
        string_battery_NiZn,
        string_battery_Unknown,
        string_battery_LED,
};

STATIC_ASSERT(sizeOfArray(ProgramData::batteryString) == ProgramData::LAST_BATTERY_TYPE);

const ProgramData::BatteryClass ProgramData::batteryClassMap[] PROGMEM = {
/*None*/    ClassUnknown,
/*NiCd*/    ClassNiXX,
/*NiMH*/    ClassNiXX,
/*Pb*/      ClassPb,
/*Life*/    ClassLiXX,
/*Lilo*/    ClassLiXX,
/*Lipo*/    ClassLiXX,
/*Li430*/   ClassLiXX,
/*Li435*/   ClassLiXX,
/*NiZn*/    ClassNiZn,
/*Unknown*/ ClassUnknown,
/*LED*/     ClassLED
};
예제 #13
0
#include "AnalogInputsPrivate.h"
#include "memory.h"
#include "Utils.h"

const AnalogInputs::DefaultValues AnalogInputs::inputsP_[] PROGMEM = {

    {{0,  50},         {12913,  11895}},   //Vout_plus_pin
    {{0,  50},         {12913,  11895}},   //Vout_minus_pin
    {{348,  100},         {5491,  1000}},   //Ismps
    {{1230,  100},         {3947,  300}},   //Idischarge

    {{0,  0},         {1,  1}},   //VoutMux
    {{8000,  5940},         {8642,  3479}},   //Tintern
    {{0,  0},         {23492,  14052}},   //Vin
    {{4701,  3660},         {0,  0}},   //Textern

    {{0,  0},         {25219,  3946}},   //Vb0_pin
    {{0,  0},         {26178,  3975}},   //Vb1_pin
    {{0,  0},         {26077,  3957}},   //Vb2_pin
    {{0,  0},         {26171,  3963}},   //Vb3_pin
    {{0,  0},         {25184,  3912}},   //Vb4_pin
    {{0,  0},         {25169,  3916}},   //Vb5_pin
    {{0,  0},         {25405,  3933}},   //Vb6_pin


    {{347,  100},         {5487,  1000}},   //IsmpsSet
    {{1915,  100},         {6210,  300}},   //IdischargeSet
};

STATIC_ASSERT(sizeOfArray(AnalogInputs::inputsP_) == AnalogInputs::PHYSICAL_INPUTS);
예제 #14
0
inline uint8_t nextInput(uint8_t i) {
    i++;
    if(i >= sizeOfArray(order_analogInputs_on)) i=0;
    return i;
}
예제 #15
0
void main(void)
{
	WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

	BCSCTL1 = CALBC1_1MHZ;                    // Set DCO (MPU to 1MHz)
	DCOCTL = CALDCO_1MHZ;

	P1SEL = BIT1 + BIT2;                     // P1.1 = RXD, P1.2=TXD
	P1SEL2 = BIT1 + BIT2;                     // P1.1 = RXD, P1.2=TXD

	//P1DIR |= BIT0 + BIT6;					// BIT0 and BIT6 as outputs (LEDS)
	P1OUT = 0;
	P2OUT = 0;

	UCA0CTL1 |= UCSSEL_2;                     // SMCLK
	UCA0BR0 = 104;                            // 1MHz 9600
	UCA0BR1 = 0;                              // 1MHz 9600
	UCA0MCTL = UCBRS0;                        // Modulation UCBRSx = 1
	UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
	IE2 |= UCA0RXIE;                          // Enable USCI_A0 RX interrupt
	__bis_SR_register(GIE);       //interrupts enabled



	char text[32];
	unsigned int text_lenth = 32;
	flushArray(text,text_lenth);

	char command[10];
	unsigned int command_lenth = 10;
	flushArray(command,10);

	//*INIT*//
	text[0] = 'H';
	text[1] = 'E';
	text[2] = 'J';

	text_lenth = sizeOfArray(text);


	//char intext[20];
	//flushArray(intext,20);


	flushArray(interarray,8);

	//char set_name[] = {"AT+NAMEkretsn5"};
	//send_at_command(set_name, 14);

	//char ret_true[] = {"SUCCESS"};
	//char ret_false[] = {"LAME"};


	TACCR0 = 20000;
	TACCTL0 |= CCIE;      // Enable interrupts for CCR0.
	TACTL |= MC_1 + TASSEL1 + ID_0 + TACLR;

	P1DIR |= red_L + red_R  + blue_R + green_R;  // LED pins to outputs, BTN is
	P2DIR |= blue_L + green_L;
	__enable_interrupt();

	//boot_seq(); //Awesome boot sequence!


	for(;;)
	{
		on();
		PWM();
		if(P1IN & button_L && hold_L == 0)
		{
			dim_all();
			mode--;
			hold_L = 1;
			buttonDelay(250);
		}
		if(P1IN & button_R && hold_R == 0)
		{
			dim_all();
			mode++;
			hold_R = 1;
			buttonDelay(250);
		}
		if((P1IN & ~button_L) && (hold_L == 1))
		{
			hold_L = 0;
		}
		if((P1IN & ~button_R) && (hold_R == 1))
		{
			hold_R = 0;
		}



		if(f_read == 1)
		{
			IE2 &= ~UCA0RXIE;
			//send_text(interarray,in_lenth);
			command_lenth = read_buffer(command);

			//*DEBUG*
			//send_text(command, command_lenth);

			f_read = 0;
			IE2 |= UCA0RXIE;
		}


		if(f_command == 1)
		{
			IE2 &= ~UCA0RXIE;

			if ( strcmp(command, "forwards") == 0 )
			{
				mode++;
			}
			else if ( strcmp(command, "backward") == 0 )
			{
				mode--;
			}
			else if ( strcmp(command, "mode0000") == 0 )
			{
				mode = 0;
			}
			else if ( strcmp(command, "mode0001") == 0 )
			{
				mode = 1;
			}
			else if ( strcmp(command, "mode0002") == 0 )
			{
				mode = 2;
			}
			else if ( strcmp(command, "mode0003") == 0 )
			{
				mode = 3;
			}
			else if ( strcmp(command, "mode0004") == 0 )
			{
				mode = 4;
			}
			else if ( strcmp(command, "mode0005") == 0 )
			{
				mode = 5;
			}
			else if ( strcmp(command, "mode0006") == 0 )
			{
				mode = 6;
			}
			else if ( strcmp(command, "mode0007") == 0 )
			{
				mode = 7;
				chaosTime = 0;
			}
			else if ( strcmp(command, "mode0008") == 0 )
			{
				mode = 8;
			}
			else if ( strcmp(command, "mode0009") == 0 )
			{
				mode = 9;
			}
			else if ( strcmp(command, "mode0010") == 0 )
			{
				mode = 10;
			}
			else if (command[0] == 'c' && command[1] == 'u' )
			{
				for(special_iter = 0; special_iter < 6; special_iter++)
				{
					special[special_iter] = command[special_iter+2];
				}
				mode = 8;
			}

			f_command = 0;
			flushArray(command,command_lenth);

			IE2 |= UCA0RXIE;
		}



	}

}
예제 #16
0
SettingsMenu::SettingsMenu(const Settings &p):
        EditMenu(SettingsStaticMenu, sizeOfArray(SettingsStaticMenu)), p_(p){};