Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp
- Committer:
- awmiller
- Date:
- 2016-05-20
- Revision:
- 1:29e57acc058b
- Parent:
- 0:6834f1402927
File content as of revision 1:29e57acc058b:
#include "mbed.h"
#include <stdio.h>
#include "Sentral.h"
#include "Test_Routines.h"
#define EV_ALT 1
typedef char* string;
AnalogIn VDD_Check(p15);
PwmOut led1(LED1);
PwmOut led2(LED2);
PwmOut led3(LED3);
PwmOut led4(LED4);
DigitalIn POWER(p22);
#ifdef EV_ALT
#if EV_ALT
I2C master(p9,p10);
#else
I2C master(p28, p27);
I2CSlave slave(p9,p10);
#endif
#endif
Serial pc(USBTX,USBRX);
LocalFileSystem local("local"); // Create the local filesystem under the name "local"
void RX_int_cb();
void VDD_read_request();
void find_PROM(I2C i2c,int &address);
int hex_read_line(FILE *hexfile);
char ascii_hex2byte(char* ascii);
int EEPROM_ADDR;
int reading,readhex;
void find_sentral();
//void sentral_startup();
int main() {
Set_SA0();
Sentral_Power(0);
led1 =0;
led2 =0.25;
led3 =0.5;
led4 =0.75;
pc.attach(&RX_int_cb);
pc.baud(115200);
pc.printf("Hello, press 't' to test a module \r\n");
reading =1;
readhex=0;
//pc.attach(&RX_int_cb);
while(1){
if(led1 = 1)
led1 =0;
if(led2 = 1)
led2 =0;
if(led3 = 1)
led3 =0;
if(led4 = 1)
led4 =0;
led1 = led1 + 0.01;
led2 = led2 + 0.01;
led3 = led3 + 0.01;
led4 = led4 + 0.01;
#ifdef EV_ALT
#if EV_ALT
#else
if(POWER==0)
{
pc.attach(NULL);
while(Sentral_Power(0));
pc.printf("MODULE POWER DISABLED \r\n");
VDD_read_request();
wait_ms(10);
pc.printf("ENABLE POWER TO CONTINUE \r\n");
while(!POWER);
while(!Sentral_Power(1));
wait_ms(10);
pc.attach(&RX_int_cb);
pc.printf("MODULE POWER ENABLED\r\n");
VDD_read_request();
}
#endif
#endif
}
//find_PROM(master, EEPROM_ADDR);
/*
FILE *fp = fopen("/local/TEST.hex", "r"); // Open "out.txt" on the local file system for writing
//hex_read_line(FILE *hexfile);
while(reading)
if(readhex)
{
if(feof(fp))
{
reading=0;
break;
}
string input; fgets(input,2,fp);
if(input[1] == ':')
pc.printf("%X",ascii_hex2byte(input));
readhex =0;
}
fclose(fp);
pc.printf("File Closed \r\n");
*/
}
void RX_int_cb() {
switch(pc.getc()) {
case 'r':
VDD_read_request();
break;
/*
case 'l':
if(reading){
if(!hex_read_line(FILE *hexfile)){
reading =0;
pc.printf("EOF\r\n");}
}else pc.printf("no file open\r\n");
break;
*/
case 'h':
if(reading)
{
readhex = 1;
}
break;
case 'f':
find_sentral();
break;
case 's':
pc.printf("Sentral Starting up. \r\n");
//find_sentral();
if(!SentralSetup(pc,master))
//pc.printf("returning to loop\r\n");
//else
pc.printf("Sentral Start exit failure\r\n");
break;
case 't':
pc.printf("Begginng module test...\r\n");
pc.printf("Sentral Starting up. \r\n");
//find_sentral();
if(!SentralSetup(pc,master))
//pc.printf("returning to loop\r\n");
//else
pc.printf("Sentral exit failure\r\n");
else if(EV0_test(pc,master)) pc.printf("Module PASS\r\n");
break;
default:
pc.printf("undefined command \r\n");
break;
}
}
void VDD_read_request() {
pc.printf("Moudle Voltage: %f \r\n",(VDD_Check.read()*3.3f));
}
void find_PROM(I2C i2c,int &EEPROM_ADDR) {
int eeprom_success =1 ;
for(EEPROM_ADDR = 0xA0;(eeprom_success && EEPROM_ADDR < 0xB0); EEPROM_ADDR+=0x02)
{
i2c.start();
eeprom_success = !(master.write(EEPROM_ADDR + 0x01));
i2c.stop();
}
if(EEPROM_ADDR < 0xB0)
pc.printf("EEPROM found at %X \r\n", EEPROM_ADDR-2);
else
pc.printf("No EEPROM found ... \r\n");
EEPROM_ADDR -= 2;
pc.printf("Testing %X, Writing '!' to 0x00 ... ", EEPROM_ADDR);
char cmd[10];
cmd[0] = 0x00;
cmd[1] = 0x00;
cmd[2] = '!';
i2c.write(EEPROM_ADDR, cmd, 3);
cmd[2] = 0;
wait(0.5);
i2c.write(EEPROM_ADDR, cmd, 2);
i2c.read(EEPROM_ADDR, cmd, 1);
pc.printf("Reading Back: %c \r\n",cmd[0]) ;
}
/*
int hex_read_line(FILE *hexfile) {
char c;
do{
c = fgetc(hexfile);
}while(!feof(hexfile) && c !=':');
if(foef(hexfile)){
pc.printf("EOF");
return 0;
}
else
{
string hexbyte;
fgets(hexbyte,2,hexfile);
ascii_hex2byte(hexbyte);
}
pc.printf("Done");
}
*/
char ascii_hex2byte(char* ascii){
if(ascii[1]>'Z')
ascii[1] = ascii[1] - 'a' + 10;
else if(ascii[1] > '9')
ascii[1] = ascii[1] - 'A' + 10;
else if((ascii[1] >= '0') && (ascii[1] <= '9'))
ascii[1] = ascii[1] - '0';
else
pc.printf("Bad Hex Word: ascii[1]");
if(ascii[0]>'Z')
ascii[0] = ascii[1] - 'a' + 10;
else if(ascii[0] > '9')
ascii[0] = ascii[0] - 'A' + 10;
else if((ascii[0] >= '0') && (ascii[1] <= '9'))
ascii[0] = ascii[0] - '0';
else
pc.printf("Bad Hex Word: ascii[0]");
return (ascii[0] *16 )+ ascii[1];
}
void find_sentral(){
char inbuff[2],obuff[2];
obuff[0] = 0x37;
int check[2];
check[0] = master.write(0x50, obuff, 1);
check[1] = master.read(0x50, inbuff, 1);
pc.printf("finding sentral... \r\nwrite %s \r\n",check[0] ? "Fail" : "Pass" );
pc.printf("read %s \r\n reading back: %X \r\n",check[1] ? "Fail" : "Pass" , inbuff[0]);
if(!check[0] && !check[1]){
pc.printf("Sentral Status: \r\n");
pc.printf("NEEPROM: %d \r\n", (int)((inbuff[0] & 16)>0));
pc.printf("StbyState: %d \r\n", (int)((inbuff[0] & 8)>0));
pc.printf("UploadErr: %d \r\n", (int)((inbuff[0] & 4)>0));
pc.printf("UploadCPT: %d \r\n", (int)((inbuff[0] & 2)>0));
pc.printf("EEPROMDTC: %d \r\n", (int)((inbuff[0] & 1)>0));}
//pc.printf("Sentral Status: %X",cmd[0]);
}
/*
void sentral_startup()
{
//reset request : 50.9c.01
//readback status, looking for xxxx x01x -- while((byte & 0x06) !=2))
wait(100)
}*/
//EOL